C++ 调用成员函数指针

C++ 调用成员函数指针,c++,pointers,member-function-pointers,C++,Pointers,Member Function Pointers,在结构中调用函数指针时遇到问题。我以前在类之外使用过这种方法,但现在我正在使用指向其他类方法的函数指针在类方法内部尝试。。。。我收到一个编译器错误。这是我的班级: class Myclass { int i; void cmd1(int) {} void cmd2(int) {} void trans() { const struct { std::string cmd;

在结构中调用函数指针时遇到问题。我以前在类之外使用过这种方法,但现在我正在使用指向其他类方法的函数指针在类方法内部尝试。。。。我收到一个编译器错误。这是我的班级:

class Myclass
{
    int i;

    void cmd1(int)
    {}

    void cmd2(int)
    {}

    void trans()
    {
        const struct
        {
            std::string cmd;
            void (Myclass::*func)(int)
        }
        CmdTable[] =
        {
            { "command1", &Myclass::cmd1 },
            { "command2", &Myclass::cmd2 }
        };

        CmdTable[0].func(i);
        CmdTable[1].func(i);
    }
};
CmdTable[0].func(i)
CmdTable[1].func(i)两者都提供以下内容
错误:
错误:表达式必须具有(指向-)函数类型


我意识到也许有更好的方法可以做到这一点,但我很好奇为什么我写的东西不管用。任何解释都将不胜感激。

指向成员函数的指针是纯类属性。为了进行有意义的函数调用,您需要将它与类实例结合起来。例如,要使用实例
*this
,您可以使用操作符
->*
,并说:

(this->*CmdTable[0])(i);
或者可以对对象值使用运算符
*

(*this.*CmdTable[0])(i);

后一种形式总是正确的。对于前者,请注意,
operator->*
可能会被重载,并执行一些无关的操作。

您可能想了解和。@JoachimPileborg:为什么?对于一个不需要它们的问题来说,这些都是非常沉重、昂贵的“解决方案”。啊,太完美了。非常感谢你。