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(); 如果有其他方式可以,请提及
指针到成员函数需要一个对象来调用函数.
对代码的最快更改是简单地传入指向要使用的对象的指针.我认为那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 来绑定参数.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |