c++的pub-sub通信(2)采用模板类实现无全局变量的多文件间通信

新建transmission.h

// Author: gyx
//This is used to define transmission class

#ifndef TRANSMISSION_H
#define TRANSMISSION_H

#include <string>
#include <functional>
#include <map>
#include <list>


using std::function;
using std::string;
using std::map;
using std::list;

template<typename type>
class Transmission
{
private:
    Transmission() = default;
    typedef function<void(type)>Callback;
    map<string,list<Callback>>subscriber;


public:
    static Transmission* getmessage()
    {
        static Transmission messgae;
        return &messgae;
    };

    void subscribe(string eventType,Callback callback)
    {
         subscriber[eventType].push_back(callback);
    };

    void publish(string eventType,type data)
    {
        for(const auto& callback : subscriber[eventType])
        {
            callback(data);
        } 
    };
};


#endif //TRANSMISSION_H

发布消息(以Mat类数据为例):

Transmission<Mat>::getmessage()->publish("Capture",CameraScreen);//transform mat

接收消息:

首先需定义一个接收类:

class Subscriber_capture
{
public:
    Mat data;

    Subscriber_capture(){
        Transmission<Mat>::getmessage()->subscribe("Capture",[this](Mat src){this->recieve_video_event(src);});
    }

    void recieve_video_event(Mat src)
    {
        data = src.clone();
    }
};

之后需实例化这个类:

Subscriber_capture subscriber_capture;

而后调用这个类接收到的信息:

Mat CameraScreen = subscriber_capture.data.clone();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值