【发布时间】:2017-12-08 16:20:56
【问题描述】:
A 有很多 B 类,一个类 A 有一个对象 b。这个对象 b 有一个函数 (calc),它需要一个指向 A 对象中方法的指针。这个方法 (fun) 访问类中的私有变量(在我的示例中只返回 3)。
class A;
class B {
public:
virtual int calc ( int (A::*fun)()) { return 2*fun(); };
};
class A {
B* b;
public:
A (B* b_) : b (b_) {};
int fun() { return 3; };
int run(){ return b->calc(&A::fun); };
};
int main() {
B* b = new B();
A a(b);
a.run();
return 0;
}
如何在 B 类中 calc 方法的定义中正确使用指向方法的指针?
我收到此错误消息:
teste.cpp:10:58: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘fun (...)’, e.g. ‘(... ->* fun) (...)’
virtual int calc ( int (A::*fun)()) { return 2*fun(); };
^
【问题讨论】:
-
指向非静态成员函数的指针确实很有趣,但你不能像那样使用它们。我会调查 std::function
-
为什么将 C 答案链接为 C++ 问题的副本?调用成员函数与调用 C 中的函数不同。
-
我相信这是一个更好的复制stackoverflow.com/questions/12662891/…
-
这是一个非常奇怪的重复。
标签: c++ function-pointers