如何通过成员函数指针调用成员函数?

时间:2013-04-29 10:28:38

标签: c++

我想通过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);

4 个答案:

答案 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)();