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

use*_*287 2 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();
}
Run Code Online (Sandbox Code Playgroud)

我在接受采访时被问到这个问题:如何从fn1()调用fn2().这就是我想要解决的问题.有人可以帮助我吗?我的主要目标是从fn1()调用fn2(); 如果有其他方式可以,请提及

Lig*_*ica 6

指针到成员函数需要一个对象来调用函数.

对代码的最快更改是简单地传入指向要使用的对象的指针.我认为那A就是你所要求fn3的.

所以:

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

和:

void fn3()
{
    b->fn1(&A::fn2, this);
}
Run Code Online (Sandbox Code Playgroud)

(现场演示)

在一次采访中,我将给出这个解决方案,然后讨论在现代C++中我们更喜欢fn1采用std::function(或模板可调用),并使用std::bind或传递lambda 来绑定参数.