你好,我是一名学生,正在研究一个使用成员函数回调的程序。我遇到了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*))’
有人可以帮帮我吗?谢谢
答案 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*
是不同的名字。我不知道这是不是一个问题。