我必须使用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'函数的完整签名。 –