1、对象之间交互的方式
C++对象之间通信的几种方式 C++对象之间通信的三种常见方式 几种回调的对比
(1)B是A的成员变量。A可随便调用B的接口,但B不能调用A(除非传指针),信号槽关联相互调用。 (2)A和B的对象在第三方类中。信号槽关联相互调用。 (3)继承虚接口 (4)消息总线(观察者模式)
2、消息总线(同步,关心结果)
2.1 ICallback
2.2 IDataBus
2.3 IMessage
2、消息总线(异步,不关心结果)
基于 Qt 实现消息总线 代码:https://github.com/cmguo/QtEventBus
3、工程应用
C++11 MessageBus–消息队列实现(同书上代码) C++的阻塞式消息总线message_bus实现(c++17同上)
思想: 以接收函数为主,发送只传递相关参数。
#include "messagebus.h"
#include
std::multimap
// 使用boost的使用 std::multimap
class Test
{
public:
void test(int, const char*) {
std::cout<< "hit test" << std::endl;
return;
}
};
int main()
{
Test t;
std::string key = "test";
// 订阅"test"消息,参数为:主题为key,回调函数为Test::test,类对像是t(不是指针)
g_messagebus.attach
// 向订阅者发送消息,消息参数是 123 和 "abc",回调函数Test::test将会被执行
g_messagebus.sendMessage
// 移除订阅"test"
g_messagebus.remove
return 0;
}
使用C++11实现的非阻塞消息总线message_bus
精彩链接
发表评论