从结构调用C ++成员函数指针

时间:2011-10-15 06:40:59

标签: c++ function-pointers

我已经找到了有关调用C ++成员函数指针和在结构中调用指针的信息,但我需要调用一个存在于结构内部的成员函数指针,而且我无法正确获取语法。我在MyClass类的方法中有以下代码片段:

void MyClass::run() {
    struct {
        int (MyClass::*command)(int a, int b);
        int id;
    } functionMap[] = {
        {&MyClass::commandRead,  1},
        {&MyClass::commandWrite, 2},
    };

    (functionMap[0].MyClass::*command)(x, y);
}

int MyClass::commandRead(int a, int b) {
    ...
}

int MyClass::commandWrite(int a, int b) {
    ...
}

这给了我:

error: expected unqualified-id before '*' token
error: 'command' was not declared in this scope
(referring to the line '(functionMap[0].MyClass::*command)(x, y);')

移动这些括号导致语法错误,建议使用。*或 - > *这两种情况都不起作用。有谁知道正确的语法?

2 个答案:

答案 0 :(得分:8)

使用:

(this->*functionMap[0].command)(x, y);

经过测试和编译;)

答案 1 :(得分:5)

我没有编译任何代码,但只是从查看它我可以看到你遗漏了一些东西。

  • 从调用函数指针的地方删除MyClass::
  • 需要将this指针传递给函数(如果它们使用任何实例数据),这意味着您需要一个MyClass实例来调用它。

(经过一些研究)看起来你需要做这样的事情(也要感谢@VoidStar):

(this->*(functionMap[0].command)(x, y));