#include <iostream>
#include <functional>
#include <string>
/*
一句话简单区分:
普通函数调用: 函数直接被调用
回调函数: 函数作为参数被调用
*/
using namespace std;
using damage = std::function<void(int time, string location)>;
class XiaoYao
{
public:
void setDamageCallback(damage cb);
damage m_damage = nullptr;
};
class XiangLiu
{
public:
XiaoYao* m_protect;
void damageCallback(int time, string location)
{
cout<<"XiangLiu damageCallback:"<<time<<"location:"<<location;
}
damage cb = std::bind(&XiangLiu::damageCallback, this, std::placeholders::_1, std::placeholders::_2);
};
class TuShanJing
{
public:
void damageCallback(int time, string location)
{
cout<<"TuShanJing damageCallback:"<<time<<"location:"<<location;
}
damage cb = std::bind(&TuShanJing::damageCallback,this, std::placeholders::_1, std::placeholders::_2);
};
void XiaoYao::setDamageCallback(damage cb)
{
m_damage = cb;
}
int main()
{
cout << "Hello World";
XiaoYao xiaoYao;
XiangLiu xiangLiu;
xiangLiu.m_protect = &xiaoYao;
xiangLiu.m_protect->setDamageCallback(xiangLiu.cb);
xiaoYao.m_damage(20230921,"FangFengYiYing");
return 0;
}
通过 std::function std::bind 添加回调
最新推荐文章于 2024-05-11 23:46:05 发布