给我写一个按需订阅的c++代码
时间: 2024-02-20 11:59:30 浏览: 17
好的,以下是一个简单的按需订阅的C++代码:
```c++
#include <iostream>
#include <unordered_map>
#include <functional>
class SubscriptionManager {
public:
void add_subscription(std::string key, std::function<void(std::string)> callback) {
if (subscriptions.find(key) == subscriptions.end()) {
subscriptions[key] = {};
}
subscriptions[key].push_back(callback);
}
void remove_subscription(std::string key, std::function<void(std::string)> callback) {
if (subscriptions.find(key) != subscriptions.end()) {
auto& callbacks = subscriptions[key];
for (auto it = callbacks.begin(); it != callbacks.end(); ++it) {
if (*it == callback) {
callbacks.erase(it);
break;
}
}
}
}
void notify_subscribers(std::string key, std::string data) {
if (subscriptions.find(key) != subscriptions.end()) {
auto& callbacks = subscriptions[key];
for (auto callback : callbacks) {
callback(data);
}
}
}
private:
std::unordered_map<std::string, std::vector<std::function<void(std::string)>>> subscriptions;
};
int main() {
SubscriptionManager manager;
auto callback1 = [](std::string data) { std::cout << "Callback 1: " << data << std::endl; };
auto callback2 = [](std::string data) { std::cout << "Callback 2: " << data << std::endl; };
manager.add_subscription("event1", callback1);
manager.add_subscription("event1", callback2);
manager.notify_subscribers("event1", "Hello, subscribers!");
manager.remove_subscription("event1", callback1);
manager.notify_subscribers("event1", "Hello again, subscribers!");
return 0;
}
```
在这个例子中,我们创建了一个`SubscriptionManager`类,它允许我们添加、删除和通知事件的订阅者。每个事件都有一个唯一的键,我们可以使用这个键来添加、删除和通知订阅者。每个订阅者都有一个回调函数,当事件被触发时将被调用,并传递事件的数据。在上面的例子中,我们添加了两个回调函数作为事件“event1”的订阅者,并通知了这个事件的订阅者。在我们删除了第一个回调函数之后,只有第二个回调函数被调用。