调用成员函数指针

Posted

技术标签:

【中文标题】调用成员函数指针【英文标题】:Calling Member Function Pointers 【发布时间】:2014-08-22 18:16:53 【问题描述】:

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

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-) 函数类型。

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

【问题讨论】:

您可能想了解std::functionstd::bind @JoachimPileborg:为什么?对于不需要它们的问题,这些是非常重量级、昂贵的“解决方案”。 【参考方案1】:

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

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

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

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

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

【讨论】:

啊,完美。非常感谢。

以上是关于调用成员函数指针的主要内容,如果未能解决你的问题,请参考以下文章

如何通过成员函数指针调用成员函数? [复制]

c++类的成员函数指针如何转为普通指针

如何从静态成员函数调用指向成员函数的指针?

this指针 (保存调用成员函数对象的地址)

C++函数指针与成员函数指针

调用成员函数指针