以下是一個簡單的使用 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; }
注意,這是一個非常基礎的釋出 / 訂閱機制示例,在實際應用中,可能需要更多的功能,如事件型別的區分、動態訂閱 / 取消訂閱、多執行緒安全性等。