如何调用函数的类的指针?

时间:2019-01-16 13:40:02

标签: c++

class A;
class B;

class B
{
public:
    void fn1(void (A::*fn)() )
    {

       //(*A::fn) ();how to call fn()?
    }
};


class A
{
    B *b;
public:
    A():b(new B){}
    void fn2()
    {
        cout<<"fn2"<<endl;
    }
    void fn3()
    {
        b->fn1(&A::fn2);
    }

};


int main()
{
    A a;
    a.fn3();
}

在一次采访中有人问我这个问题:如何从fn1()调用fn2()。这就是我要解决的问题。有人可以帮我吗? 我的主要目标是从fn1()调用fn2();如果有其他任何可能的方式,请提及

1 个答案:

答案 0 :(得分:6)

指向成员函数的指针需要一个对象来调用该函数。

对代码的最快更改是简单地将指针传递给要使用的对象。我假设这是您在{{1}上呼叫过的A

所以:

fn3

和:

void fn1(void (A::*fn)(), A* ptr)
{
   (ptr->*fn)();   // Yeah, the syntax is kind of weird
}

live demo

在一次采访中,我将提供此解决方案,然后讨论在现代C ++中我们如何希望void fn3() { b->fn1(&A::fn2, this); } 接受fn1(或可调用的模板),并使用{ {1}}或通过lambda。