以下是一个简单的使用 C++ 实现发布 / 订阅机制的示例代码。这个示例包含一个简单的事件系统,其中有发布者(Publisher
)和订阅者(Subscriber
)。
以下代码需要C++11以上支持
#include <iostream> #include <vector> #include <functional>// 事件参数结构体,可以根据实际需求修改 struct EventData {int value; };// 事件处理函数类型定义 using EventHandler = std::function<void(const EventData&)>;// 发布者类 class Publisher { public:void publish(const EventData& data) {for (const auto& handler : subscribers) {handler(data);}}void subscribe(EventHandler handler) {subscribers.push_back(handler);}private:std::vector<EventHandler> subscribers; };// 订阅者类示例 class Subscriber { public:Subscriber(const std::string& name) : name(name) {}void onEvent(const EventData& data) {std::cout << name << " received event with value: " << data.value << std::endl;}private:std::string name; };int main() {Publisher publisher;Subscriber sub1("Subscriber 1");Subscriber sub2("Subscriber 2");// 订阅者注册事件处理函数,这里将sub1的onEvent成员函数,传入到publisher的容器中,被后续publish触发调用。publisher.subscribe(std::bind(&Subscriber::onEvent, sub1, std::placeholders::_1));publisher.subscribe(std::bind(&Subscriber::onEvent, sub2, std::placeholders::_1));EventData event = { 42 };publisher.publish(event);EventData event2 = { 43 };publisher.publish(event2);return 0; }
注意,这是一个非常基础的发布 / 订阅机制示例,在实际应用中,可能需要更多的功能,如事件类型的区分、动态订阅 / 取消订阅、多线程安全性等。