我想要一個模板類(包裝器),它可以採用所有可能的類(T)並且使用這些類的成員函數(在這裏評估)功能)。任意類的const和非const成員函數的模板包裝器
我發現了類似的請求,您可以看到here和here,但都不能滿足以下兩個條件。
條件:
兩個,一個指針到類(T * PTR)的實例和指針成員函數(功能)必須是包裝類內訪問。
包裝類應與const,non-const成員函數一起使用。
這裏說的只對非const工作的代碼:
#include <iostream>
#include <math.h>
template< class T, double (T::*fck) (double) >
struct Wrapper
{
Wrapper(T * ptrT);
double evaluate(double);
protected:
T * myPtrT;
};
template< class T, double (T::*fck) (double) >
Wrapper<T, fck>::Wrapper(T * ptrT) : myPtrT(ptrT) {}
template< class T, double (T::*fck) (double) >
double Wrapper<T, fck>::evaluate(double s)
{ return (myPtrT->*fck)(s); }
struct kernel
{
double gauss(double s)
{
return exp(-0.5*s*s);
}
};
int main()
{
kernel G;
Wrapper<kernel, &kernel::gauss> myKernel (&G);
std::cout<< myKernel.evaluate(0.0) <<std::endl;
std::cout<< myKernel.evaluate(0.3) <<std::endl;
return 0;
}