新建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();