2012-11-28 45 views
0

你好我是一個學生在一個程序上工作我有一個使用成員函數的回調。我遇到了使用綁定,這正是我需要的。我只是很難得到它的工作。boost :: 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

首先,我很驚訝你沒有得到與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*是不同的名字。我不知道這是否會成爲問題。

相關問題