C++中消息订阅模式的处理过程,针对不同的消息处理的数据不同,如果通过类型继承处理,需要写很多的类型,通过模版会减少代码的编写。
在学习别人的代码的时候,看见了这种模式,感觉挺好做个笔记。
#include <iostream>
#include <functional>
#include <map>
using namespace std;
enum EventType{
ADD,
SUB,
MUL,
DIV
};
template<class T, class ...Args>
class EventDelegate{
public:
EventDelegate(){}
~EventDelegate(){}
size_t Subscribe(function<void(T, Args...)> func){
_map[_id++] = func;
return _id;
}
void Unubscribe(size_t id){
_map.erase(id);
}
void Fire(T t){
for(auto& iter: _map){
iter.second(t);
}
}
private:
size_t _id = 0;
map<size_t, function<void(T, Args...)>> _map;
};
template<class T, class ...Args>
class EventManager {
public:
static EventDelegate<T, Args...> _event;
};
template<class T, class ...Args>