回调函数 类

学习笔记

#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__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值