Ste*_*and 1 c++ templates member-function-pointers
这是我试图实现的目标:
class MyClass
{
public:
template<typename T>
void whenEntering( const std::string& strState,
T& t,
void T::(*pMemberFunction)(void)) /// compilation fails here
{
t.(*pMemberFunction)(); // this line is only an example
}
}
Run Code Online (Sandbox Code Playgroud)
它是一种回调系统,用于对我收到的某些事件作出反应.
但是Visual 2010给出了以下编译错误:
error C2589: '(' : illegal token on right side of '::'
Run Code Online (Sandbox Code Playgroud)
我可能错误的指向成员的语法...但我也担心我可能不会这样定义模板...你有什么想法吗?
你要 void (T::*pMemberFunction)(void)
另一个问题可能只是您的示例用法中的拼写错误,但调用成员函数.*用作单个运算符; 你不能(在他们之间,甚至是空白.我猜这是一个错字,因为它几乎是处理指向成员运算符的奇怪运算符优先级的正确方法:
(t.*pMemberFunction)();
Run Code Online (Sandbox Code Playgroud)