将类成员函数变为普通函数

最近遇到一个需求,拿到一个库里面的接口注册一个回调函数,但是该注册函数的形式为

typedef void(*FUNC)(void *msg);
void regListener(FUNC callbak);

 即需要一个普通的函数

但是我们需要在类内解析回调传过来的数据

void ClassName::interface(void *msg){}

 直接将interface传给 regListener 则会报错。解决:

//1. 定义一个普通的函数,调用一个function可调用对象
std::function 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);
}

你可能感兴趣的:(笔记,c++)