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

标签 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();如果有任何其他可能的方式,请提及

最佳答案

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

对您的代码进行最快的更改是简单地传递一个指向您要使用的对象的指针。我假设这是您调用 fn3A

所以:

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/

相关文章:

c++ - 如何在 C++ 中读取系统信息?

c++ - 适用于 Google Chrome 的简单 hello world NPAPI 插件?

c++ - 插入二叉搜索树

c++ - 如何让 C++ 程序查找 DLL?

c++ - 在 Windows 上使用 MinGW 进行通配

c++ - 在 Boost ASIO 中,如何设置源 IP 地址以模拟另一台服务器的 IP 地址?

c++ - RcppArmadillo 和 R 3.1.3 以及 Mac Yosemite 的编译错误

c++ - 在初始化列表中创建单例对象会导致访问冲突(仅限 Release模式)

具有类设计的 C++ OOP

C++:为什么 decltype (*this) 返回一个引用?