以下是一个简单的使用 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; }在这个示例中:
注意,这是一个非常基础的发布 / 订阅机制示例,在实际应用中,可能需要更多的功能,如事件类型的区分、动态订阅 / 取消订阅、多线程安全性等。
标签:std,订阅,函数,Publisher,示例,c++,Subscriber,例子,类掉 From: https://www.cnblogs.com/lyggqm/p/18453628