如何通过成员函数指针调用成员函数? [复制]
Posted
技术标签:
【中文标题】如何通过成员函数指针调用成员函数? [复制]【英文标题】:How to call member function through member function pointer? [duplicate] 【发布时间】:2013-04-29 10:28:37 【问题描述】:我想通过成员函数指针调用成员函数。调用函数也是成员。
class A;
typedef int (A::*memFun)();
class A
int P()return 1;
int Q()return 2;
int R()return 3;
int Z(memFun f1, memFun f2)
return f1() + f2(); //HERE
public:
int run();
;
int A::run()
return Z(P, Q);
int main()
A a;
cout << a.run() << endl;
我做的不对,而且出错了-
main.cpp:15:19: error: must use '.*' or '->*' to call pointer-to-member function in 'f1 (...)', e.g. '(... ->* f1) (...)'
return f1() + f2(); //HERE
请给出正确的方法。
EDIT - 还有一个错误,可以通过 -
return Z(&A::P, &A::Q);
【问题讨论】:
【参考方案1】:(this->*f1)() + (this->*f2)();
无论您是否从类内部调用它,您都必须明确指定要调用的对象(在本例中为this
)。还要注意必需的括号。以下是错误的:
this->*f1() + this->*f2()
【讨论】:
+1 谢谢,这行得通。在看到编译器错误后,我确实尝试了this->*f1() + this->*f2()
,但它当然没有用。【参考方案2】:
像这样:
(this->*f1)() + (this->*f2)()
【讨论】:
谢谢!解决了它。但我有另一个错误,我没有提到,但@Joachim 回答了。【参考方案3】:虽然您不显示它,但您在调用Z
时很可能也会出错。
你需要这样调用函数:
Z(&A::P, &A::Q)
【讨论】:
+1 谢谢你解决了我刚要问的问题。【参考方案4】:你必须使用这个
(this->*f1)();
【讨论】:
以上是关于如何通过成员函数指针调用成员函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章