我正在寻找并坚持将类和结构实例作为参数使用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)
{
}
答案 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}}。