将成员函数指针转换为具有多个参数的标准C函数

时间:2018-02-07 23:06:12

标签: c++

我试图将成员函数指针转换为标准C函数指针,但没有成功。

我尝试了不同的方法,但我错过了一些东西。

我的问题是我需要调用一个库的函数,该函数将参数作为一个函数:

{{1}}
以这种方式在课堂内

{{1}}

不幸的是,_callback()函数不能是静态的。

我也尝试使用std :: bind但没有财富。

我有什么方法可以将会员传递给该职能部门吗?

1 个答案:

答案 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);
   }
}