如何使用 boost::bind 将类/结构实例作为参数传递给回调

How to pass class/structure instances as arguments to callbacks using boost::bind?

本文关键字:参数传递 实例 回调 boost 何使用 bind 将类 结构      更新时间:2023-10-16

我正在寻找并坚持将类和结构实例作为参数传递到使用boost::bind调用函数的问题

到目前为止,使用此方法回调工作正常。我想使用下面显示的代码片段

class A
{
  public :
  static int i = 1;
};

但是,我想将此类实例传递给下面描述的此回调函数指针

void Init(void (*Notify)(A *a, int, int,int),int arr[],
          A *a, value,int left,int right)
{
}

不能直接使用提升绑定来执行此操作。 Init函数需要一个指向具有此签名的自由函数的指针:

void (*)(A *a, int, int, int)

所以你可以实现这样的一个:

void foo(A *a, int x, int y, int z)
{
    a->whatever(x, y, z);
}

然后你会打电话给Init(foo, ...).

但它必须是一个自由函数;有点等效的 Boost Bind 表达式将不起作用:

boost::bind(&A::whatever, _1, _2, _3)

为什么这行不通? 因为Init需要一个自由函数,而不是例如支持boost::bindboost::function<void(A*,int,int,int>)>