调用成员函数指针

Calling Member Function Pointers

本文关键字:指针 函数 成员 调用      更新时间:2023-10-16

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

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

我知道可能有更好的方法来做到这一点,但我很好奇为什么我所写的不起作用。

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

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

或者可以对对象值使用.*操作符:

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

后一种形式总是正确的。对于前者,请注意operator->*可能被重载并做一些不相关的事情。