使用成员函数进行回调的boost :: bind帮助

时间:2012-11-28 20:35:01

标签: c++ boost callback boost-bind

你好,我是一名学生,正在研究一个使用成员函数回调的程序。我遇到了bind的使用,这正是我所需要的。我正在努力工作。

以下是相关代码和编译错误

 // this is the API function to register callback
 void register_callback_datapoint(void(*)(datapoint_t *datapoint) cb_datapoint ) 

 // this function is my callback
 void datapoint_update(datapoint_t* datapoint);

 // this code is called in the aggregateThread class
 boost::function<void(datapoint_t*)> f;
 f = bind(&aggregateThread::datapoint_update, this, std::tr1::placeholders::_1);
 register_callback_datapoint(f);

 // here is the compile error
 cannot convert ‘boost::function<void(datapoint_opaque_t*)>’ to ‘void (*)(datapoint_t*)
 {aka void (*)(datapoint_opaque_t*)}’ for argument ‘1’ to ‘void 
 register_callback_datapoint(void (*)(datapoint_t*))’

有人可以帮帮我吗?谢谢

1 个答案:

答案 0 :(得分:0)

首先,我很惊讶您没有收到void register_callback_datapoint(void(*)(datapoint_t *datapoint) cb_datapoint )的错误。用于将函数指针声明为参数的正确语法为void register_callback_datapoint(void(*cb_datapoint)(datapoint_t *datapoint));

然而,问题是你试图传递一个boost::function,这是一个函数对象而不是可以隐式转换为register_callback_datapoint的函数指针。您需要将参数更改为boost::function或将其设为模板。

void register_callback_datapoint(boost::function<void(datapoint_opaque_t*)> f);

template <typename Func>
void register_callback_datapoint(Func f);

另外,我刚注意到这一点,但是你的示例和编译错误不匹配。一个说datapoint_opaque_t*,另一个说datapoint_t*是不同的名字。我不知道这是不是一个问题。