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 MessageBus::m_map;

// 使用boost的使用 std::multimap MessageBus::m_map;

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(key, &Test::test, t);

// 向订阅者发送消息,消息参数是 123 和 "abc",回调函数Test::test将会被执行

g_messagebus.sendMessage(key, 123, "abc");

// 移除订阅"test"

g_messagebus.remove(key);

return 0;

}

使用C++11实现的非阻塞消息总线message_bus

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: