想象一下,我有一个模板类,我在其中定义了函数指针的typdedef到BaseClass函数,它返回T并且没有参数:
template <typename T, typename BaseClass> class TConnectionPoint
{
typedef T (BaseClass::* PConnectionFunction)();
private:
PConnectionFunction _func;
public:
T Call();
}
此模板的方法有Call():
template <typename T, typename BaseClass> T TConnectionPoint<T,BaseClass>::Call()
{
return _func();
}
当我尝试执行Call()函数时出现问题 - VS2013发给我这个错误,这让我有些困惑:
术语不评估为采用0参数的函数
我做错了什么?
答案 0 :(得分:1)
指向成员函数的指针只能与一个对象(将在其上调用该函数)一起取消引用。您需要访问BaseClass
类型的对象才能使用它。
例如,您可以像这样更改Call()
:
template <typename T, typename BaseClass>
T TConnectionPoint<T,BaseClass>::Call(BaseClass &obj)
{
return (obj.*_func)();
}
答案 1 :(得分:1)
typedef将PConnectionFunction
定义为成员函数指针,而不是普通函数指针。您只能在对象上调用成员函数,如下所示:
template <typename T, typename BaseClass>
T TConnectionPoint<T,BaseClass>::Call(BaseClass& b)
{
return (b.*_func)();
}
如果您要调用 static 成员函数ob BaseClass
,那么函数指针需要是普通函数指针,而不是成员函数指针:
typedef T (* PConnectionFunction)();