1)在类中定义函数指针,提供回调函数注册接口
class A
{
public:
A();
public:
using PF = void(std::string str);
void RegisterCallback(const std::function<PF>& fn)
{
_callback = fn;
}
private:
std::function<PF> _callback = NULL;
};
2)注册回调函数的三种方法
a.传递函数指针
void ff1(std::string str)
{
}
A a
a.RegisterCallback(ff1);
b.传递lambda表达式
auto ff2 = [](std::string str)
{
};
A a;
a.RegisterCallback(ff2);
c.使用std::bind
class B
{
public:
void ff3(std::string str){}
}
A a;
B b;
a.RegisterCallback(std::bind(&B::ff3, &b, std::placeholders::_1));//函数参数占位符