调用成员函数指针

时间:2014-08-22 18:16:53

标签: c++ pointers member-function-pointers

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

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);都提供以下内容 错误: 错误:表达式必须具有(指针指向)函数类型。

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

1 个答案:

答案 0 :(得分:4)

指向成员函数的指针是纯属性。您需要将它与类实例组合才能进行有意义的函数调用。例如,要使用实例*this,您可以使用运算符->*并说:

(this->*CmdTable[0])(i);

或者您可以在对象值上使用运算符.*

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

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