我实际上是在尝试定义以下类型:X和Y是类型,我想定义指向成员函数Y F(X)const的指针的模板类型" a" T级。
为此,我定义了以下内容:
template<typename T, typename X, typename Y>
struct GenericFunc
{
typedef Y (T::*F) ( X ) const ;
};
现在如果
class Fct
{
public:
Fct( /* something */);
double F( double ) const
{
// stuff...
}
};
如果我宣布
Fct thef(/* something */);
GenericFunc<Fct, double, double>::F phi ;
我想用thef和phi来获得双倍,但我不能成功。任何的想法 ?什么是F是operator()?
事实上,我可以这样做:
Fct thef(/* something */);
double (Fct::*fptr) (double) const = & Fct::F ; // or double (Fct::*fptr) (double) const = & Fct::operator() ;
double x = 3.14159 ;
double y = (thef.*fptr)(x);
但是我想以通用的方式进行,也就是说,在F的参数的类型X和F的返回类型Y上,在具有成员函数F的类T上是泛型的。 / p>
很多
PS:我使用的是c ++&lt; c ++ 11,这就是我在struct中使用typedef的原因,我想坚持下去。
答案 0 :(得分:1)
这有效:
Fct thef;
GenericFunc<Fct, double, double>::F phi = &Fct::F;
double x = (thef.*phi)(1);