最近遇到一个需求,拿到一个库里面的接口注册一个回调函数,但是该注册函数的形式为
typedef void(*FUNC)(void *msg);
void regListener(FUNC callbak);
即需要一个普通的函数
但是我们需要在类内解析回调传过来的数据
void ClassName::interface(void *msg){}
直接将interface传给 regListener 则会报错。解决:
//1. 定义一个普通的函数,调用一个function可调用对象
std::function<void(void*)> function_interface;
void Func_interface(void *msg){
function_interface(msg);
}
//2. 类内 function 绑定类成员函数
ClassName::ClassName(){
function_interface = std::bind(&ClassName::interface,this, std::placeholders::_1);
//3. 注册
regListener(Func_interface);
}