我想通过member-function-pointers调用成员函数。调用函数也是成员。
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
请说明正确的方法。
编辑 - 还有另一个错误,可以通过 -
解决return Z(&A::P, &A::Q);
答案 0 :(得分:19)
(this->*f1)() + (this->*f2)();
无论您是从类中调用它,都必须明确指定要调用的对象(在本例中为this
)。另请注意必需括号。以下是错误的:
this->*f1() + this->*f2()
答案 1 :(得分:4)
像这样:
(this->*f1)() + (this->*f2)()
答案 2 :(得分:3)
虽然您没有显示,但在调用Z
时,您很可能也会遇到错误。
你需要调用这样的函数:
Z(&A::P, &A::Q)
答案 3 :(得分:2)
你必须使用这个
(this->*f1)();