声明模板时指向成员函数语法的指针

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)

我可能错误的指向成员的语法...但我也担心我可能不会这样定义模板...你有什么想法吗?

bam*_*s53 6

你要 void (T::*pMemberFunction)(void)

另一个问题可能只是您的示例用法中的拼写错误,但调用成员函数.*用作单个运算符; 你不能(在他们之间,甚至是空白.我猜这是一个错字,因为它几乎是处理指向成员运算符的奇怪运算符优先级的正确方法:

(t.*pMemberFunction)();
Run Code Online (Sandbox Code Playgroud)