我想把一个成员函数作为回调函数分配给一个API方法,但是它返回下面的错误信息,我不知道如何解决这个问题。用boost :: bind和boost :: function赋值回调成员函数
cannot convert ‘boost::function<int(rcv_t_stct*, msg_t_stct*)>*’ to ‘rcv_cb {aka int (*)(rcv_t_stct*, msg_t_stct*)}’
回调签名:
typedef int (*rcv_cb)(rcv_t *rcv, msg_t *msg);
回调二传手:
create(rcv_cb cb);
我的成员函数:
int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
return 0;
}
试图分配给二传手:
boost::function<int (rcv_t *, msg_t *)> f2(boost::bind(&receiver::on_received, this, _1, _2));
create(f2);
解决方案:
我改变了接收器类独居,和所使用的静态成员函数来包装非静态的。
int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
return receiver::instance().on_received_private(rcv, msg);
}
这是解决此问题的最佳解决方案吗?
你可以改变回调签名'boost :: function'? –
不,我不能。它是第三方库 –