答案:使用观察者模式和std::function实现事件总线,通过map管理主题与回调,支持订阅/发布,示例含日志与告警响应,可扩展线程安全与模板化。

在C++中实现一个简单的发布/订阅(Pub/Sub)系统,核心是让消息的发送者(发布者)与接收者(订阅者)解耦。订阅者可以注册自己感兴趣的事件或主题,当某个主题有消息发布时,所有订阅该主题的观察者都会收到通知。
使用观察者模式结合回调机制来实现。关键组件包括:
下面是一个轻量级实现示例:
#include <iostream>
#include <map>
#include <vector>
#include <functional>
#include <string>
class EventBus {
public:
using Callback = std::function<void(const std::string&)>;
// 订阅某个主题
void subscribe(const std::string& topic, const Callback& callback) {
callbacks_[topic].push_back(callback);
}
// 发布消息到指定主题
void publish(const std::string& topic, const std::string& message) {
auto it = callbacks_.find(topic);
if (it != callbacks_.end()) {
for (const auto& cb : it->second) {
cb(message);
}
}
}
private:
std::map<std::string, std::vector<Callback>> callbacks_;
};
定义几个简单的回调函数模拟不同订阅者:
立即学习“C++免费学习笔记(深入)”;
void logger(const std::string& msg) {
std::cout << "[Logger] Received: " << msg << "\n";
}
void alert_system(const std::string& msg) {
std::cout << "[Alert] !! " << msg << " !!" << "\n";
}
int main() {
EventBus bus;
// 订阅主题
bus.subscribe("logs", logger);
bus.subscribe("alerts", alert_system);
bus.subscribe("alerts", [](const std::string& msg) {
std::cout << "[Popup] " << msg << "\n";
});
// 发布消息
bus.publish("logs", "System started");
bus.publish("alerts", "High CPU usage!");
return 0;
}
输出结果:
[Logger] Received: System started这个基础版本可以按需增强:
以上就是c++++怎么实现一个简单的发布/订阅系统_c++发布订阅(Pub/Sub)模式实现方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号