学习笔记
#ifndef CallBackMediator_h__
#define CallBackMediator_h__
#include "CoreExport.h"
#include "CallBackFunc.h"
#include <functional>
#include <unordered_map>
#include <memory>
namespace MaLBCore {
//UI的信号槽解耦类
class UPMLBCORE_EXPORT CallBackMediator
{
public:
CallBackMediator() = default;
~CallBackMediator() = default;
template<typename F>
void addCallBack(int funcType, const std::function<F>func) {
CallBack<F>callBack(func);
slotCallBacks_.emplace(funcType, callBack.getFunc());
}
template<typename F>
void addCallBack(const std::function<F>func) {
CallBack<F>callBack(func);
slotCallBack_ = callBack.getFunc();
}
template<typename F, typename...Args>
void doCallBacks(int signalType,Args&& ...args)
{
auto iterFind = slotCallBacks_.find(signalType);
if (iterFind == slotCallBacks_.end()) {
return;
}
boost::any value = iterFind->second;
MaLBCore::CallBack<F>callBack(value);
callBack.getFunc()(std::forward<Args>(args)...);
}
template<typename F, typename...Args>
void doCallBack(Args&& ...args)
{
MaLBCore::CallBack<F>callBack(slotCallBack_);
callBack.getFunc()(std::forward<Args>(args)...);
}
protected:
std::unordered_map<int, boost::any> slotCallBacks_{};
private:
boost::any slotCallBack_;
};
using SmartCallBackMediator = std::shared_ptr<CallBackMediator>;
}
#endif // CallBackMediator_h__