我已经找到了有关调用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);')
移动这些括号导致语法错误,建议使用。*或 - > *这两种情况都不起作用。有谁知道正确的语法?
答案 0 :(得分:8)
使用:
(this->*functionMap[0].command)(x, y);
经过测试和编译;)
答案 1 :(得分:5)
我没有编译任何代码,但只是从查看它我可以看到你遗漏了一些东西。
MyClass::
。this
指针传递给函数(如果它们使用任何实例数据),这意味着您需要一个MyClass
实例来调用它。(经过一些研究)看起来你需要做这样的事情(也要感谢@VoidStar):
(this->*(functionMap[0].command)(x, y));