我试图将成员函数指针转换为标准C函数指针,但没有成功。
我尝试了不同的方法,但我错过了一些东西。
我的问题是我需要调用一个库的函数,该函数将参数作为一个函数:
{{1}}以这种方式在课堂内
:
{{1}}
不幸的是,_callback()函数不能是静态的。
我也尝试使用std :: bind但没有财富。
我有什么方法可以将会员传递给该职能部门吗?
答案 0 :(得分:2)
我试图将成员函数指针转换为标准C函数指针,但没有成功。
简短的回答:你不能。
更长的答案:创建一个包装函数,用作C函数指针并从中调用成员函数。请记住,您需要有一个对象才能进行该成员函数调用。
以下是一个例子:
void setFunction(void(*cbfun)(float*,int,int,int,int)){ ... }
class base_t;
base_t* current_base_t = nullptr;
extern "C" void callback_wrapper(float * a, int b, int c, int d, int e);
class base_t {
public:
void setCallback(){
current_base_t = this;
setFunction(&callback_wrapper);
}
private:
void _callback(float * a, int b, int c, int d, int e) { ... }
};
void callback_wrapper(float * a, int b, int c, int d, int e)
{
if ( current_base_t != nullptr )
{
current_base_t->_callback(a, b, c, d, e);
}
}