C++ 将成员函数传递给另一个类

C++ Pass a member function to another class

本文关键字:另一个 成员 函数 C++      更新时间:2023-10-16

我正在尝试在C++中进行简单的回调,但是我无法按照自己的方式进行操作。

本质上我想要这样的东西:

class A{
   void A::AddCallback(void (*callBackFunction)(string)){
      /*Code goes here*/
   }
}

和B类

#include "A.h"
class B{
   B::B(){
      A childObject;
      childObject(MyCallBackFunction);   
   }
   B::MyCallBackFunction(string arg){
      /*Code goes here*/
   }
}

我知道通常你会想用类似 B::callBackFunction 的东西定义 AddCallback 的标头,但我确实需要在 B 中导入A,所以我让两个类相互导入会很尴尬。我知道我以前见过这个,但我无法正确理解语法

下面是一个使用静态成员函数的选项:

#include <string>
struct A
{
    void AddCallback(void (*cb)(std::string));
};
struct B
{
    A a;
    B() { a.AddCallback(&B::MyFun); }
    static void MyFun(std::string);
};

如果需要非静态成员函数,则首先需要确定要调用成员函数的哪个B实例。例如,要在构造函数注册回调的对象上调用它:

#include <functional>
#include <string>
struct A
{
    void AddCallback(std::function<void(std::string)>);
};
struct B
{
    A a;
    B() { a.AddCallback(std::bind(&B::MyFun, this, std::placeholders::_1)); }
    void MyFun(std::string);
};

你必须调用void A::AddCallback并传递回调,而不是在childObject(MyCallBackFunction)中传递参数;

相关文章: