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;

浙公网安备 33010602011771号