c++ - 调用成员函数指针

标签 c++ pointers pointer-to-member

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

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->* 可能会重载并执行一些不相关的操作。

关于c++ - 调用成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25453259/

相关文章:

c - 为什么我必须在 for 循环中跳过二月并使用 mes->fevereiro[j] 而不是 mes->meses[1][j]?

python - 如何在没有指针的情况下用python构建二叉搜索树?

c++ - 在这种情况下如何传递成员函数而不是函数?

c++ - 指向非模板成员函数指针的模板成员函数指针

c++ - 是否有一个对称的设计模式让成员类可以有指向彼此的指针?

c++ - 在没有数组的情况下更新最后 3 个值?

c - 使用具有双指针的结构及其内存构成

指向重写方法的 C++ 方法指针

c++ - 程序化 QGraphicsView 滚动未正确更新

c++ - C++ 中的这种隐式转换是如何发生的?