我必須使用C庫來抓取圖像,它具有流功能。所以當調用start_stream
方法時,我必須傳遞一個函數指針。我想從一個類傳遞一個方法到那個函數。C回調和標準::函數::目標
這裏是回調方法的簽名:void StreamCallback(SomeType* img)
,我必須通過void(* StreamCallbackPtr)(SomeType* img)
到start_stream
方法,其特徵是int start_stream(StreamCallbackPtr stream_callback)
我有一個類,看起來像這樣:
class MyClass
{
private:
void Callback(SomeType* img)
{
std::cout << "grabbed" << std::endl;
// Do something with the image ...
}
public:
void StartStream()
{
std::function<void(SomeType* img)> cb =
std::bind(&MyClass::Callback, this, std::placeholders::_1);
if(not cb) // if the call-wrapper has wrapped a callable object
{
std::cout << "error" << std::endl;
exit(0);
}
ptr_fun_ = cb.target<FuncType*>();
if(ptr_fun_ != nullptr)
{
start_stream(ptr_fun_);
}
else
{
std::cout << "error" << std::endl;
exit(0);
}
}
private:
typedef void FuncType(SomeType* img);
FuncType* ptr_fun_;
};
但不幸的是ptr_fun_
始終爲空。你能發現錯誤嗎?
該代碼不支持您傳遞C函數的目標。爲獲得最佳指導,請提供'start_stream'函數的完整簽名。 –