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

时间:2013-10-07 09:44:04

标签: c++ boost-bind

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

到目前为止,使用this method回拨的工作正常。 我想使用下面显示的代码片段

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)
{

}

1 个答案:

答案 0 :(得分:0)

您不能直接使用Boost Bind来执行此操作。您的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::function<void(A*,int,int,int>)>的{​​{1}}。