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();如果有其他任何可能的方式,请提及
答案 0 :(得分:6)
指向成员函数的指针需要一个对象来调用该函数。
对代码的最快更改是简单地将指针传递给要使用的对象。我假设这是您在{{1}上呼叫过的A
。
所以:
fn3
和:
void fn1(void (A::*fn)(), A* ptr)
{
(ptr->*fn)(); // Yeah, the syntax is kind of weird
}
在一次采访中,我将提供此解决方案,然后讨论在现代C ++中我们如何希望void fn3()
{
b->fn1(&A::fn2, this);
}
接受fn1
(或可调用的模板),并使用{ {1}}或通过lambda。