C++无法将类成员函数赋值给一般函数指针的解决方案

遇到需要绑定回调函数的API接口。
看了需要绑定回调的函数指针声明,是一般函数指针,将非静态的类成员函数赋值过去的时候,无法编译通过。
将成员函数改成静态又得将整个类的内容都改成静态。

这种情况下,可以构造匿名函数,引用this,这样可以在类中,将自己的成员函数赋值给需要的函数指针类型上:

server.callback = [this](const XXX data){OnCallback(data);};

以上这种情况是接收的类型使用std::function定义时可以使用的。

如果对面的接收函数直接声明成一般函数指针或者void*的情况下,
只能先定义一个中间函数,然后,找到类的实例,在中间函数中调用myClass.OnCallback的方式来实现。

//当server.callback的类型不是std::function而是void*时
MyClass* this_;//需要有指针保存所需类的实例

//一般函数,不在类中
void OnRev(const XXX data){
  //类实例调用函数
  this_.OnCallback(data);
}

//绑定时直接强转即可
server.callback = (void *)OnRev;
posted @ 2023-08-18 14:50  图图雷  阅读(216)  评论(0)    收藏  举报