我想要一个模板类(包装器),它可以采用所有可能的类(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;
}