调用C++中的成员函数指针

6

我有一个指向类内定义的成员函数的指针,例如:

class Example {
   void (Example::*foo)();

   void foo2();
};

在我的主要代码中,我将foo设置为:
Example *a;
a->foo = &Example::foo2;

然而,当我尝试调用foo时:
a->foo();

我遇到了以下编译时错误:“error: expression preceding parentheses of apparent call must have (pointer-to-) function type”。我猜想我在某个地方语法出错了,有人能指出来吗?

4
这句话是C++代码,意思是调用指向a对象的foo函数指针所引用的函数。可以翻译成“调用a对象的foo函数指针所指向的函数”。 - Bob Fincheimer
很遗憾,这不起作用。a->foo() 返回 "error: foo is undefined",而 a->(a->foo)() 给出了原始的错误消息。 - wolfPack88
3
由于运算符优先级的原因,需要在 a->*(a->foo) 周围加上括号。 - Bob Fincheimer
如果将成员函数绑定到类似于 std::function 的东西上,您就不必担心奇怪的语法,但做到这一点会稍微增加间接寻址开销。 - YoungJohn
点击这里查看C++常见问题解答:http://www.parashift.com/c++-faq/pointers-to-members.html - Thomas Matthews
1个回答

14

要调用它,您可以执行以下操作:(a->*(a->foo))()

(a->*X)(...) - 解引用成员函数指针 - 括号a->*X的优先级很重要。

X = a->foo - 在您的示例中。

请参见ideone此处有一个可工作的示例


1
请参阅C++ FAQ以获取工作示例和讨论:http://www.parashift.com/c++-faq/pointers-to-members.html - Thomas Matthews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接