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();如果有任何其他可能的方式,请提及
最佳答案
指向成员函数的指针需要一个对象来调用函数。
对您的代码进行最快的更改是简单地传递一个指向您要使用的对象的指针。我假设这是您调用 fn3
的 A
。
所以:
void fn1(void (A::*fn)(), A* ptr)
{
(ptr->*fn)(); // Yeah, the syntax is kind of weird
}
和:
void fn3()
{
b->fn1(&A::fn2, this);
}
( live demo )
在一次采访中我会给出这个解决方案,然后讨论在现代 C++ 中我们如何更愿意让 fn1
采用 std::function
(或模板可调用),并使用 std::bind
或传递 lambda 来绑定(bind)参数。
关于c++ - 如何将函数调用到类的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218331/