如何通过成员函数指针调用成员函数? [复制]

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-&gt;*f1() + this-&gt;*f2(),但它当然没有用。【参考方案2】:

像这样:

(this->*f1)() + (this->*f2)()

【讨论】:

谢谢!解决了它。但我有另一个错误,我没有提到,但@Joachim 回答了。【参考方案3】:

虽然您不显示它,但您在调用Z 时很可能也会出错。

你需要这样调用函数:

Z(&A::P, &A::Q)

【讨论】:

+1 谢谢你解决了我刚要问的问题。【参考方案4】:

你必须使用这个

(this->*f1)(); 

【讨论】:

以上是关于如何通过成员函数指针调用成员函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过保存在容器中的成员指针函数调用?

c++类的成员函数指针如何转为普通指针

为啥指向基类的派生类指针可以调用派生类成员函数? [复制]

如何从另一个类调用指向成员的函数? [复制]

当我在 NULL 对象指针上调用成员函数时会发生啥? [复制]

当我在 NULL 对象指针上调用成员函数时会发生啥? [复制]