0

我正在寻找并坚持将类和结构实例作为参数传递给使用回调函数的问题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)
{

}
4

1 回答 1

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>)>支持boost::bind.

于 2013-10-07T14:01:22.087 回答