c++ 伪代码设计一个通用的消息订阅器class,有init,有AddSubscriber来绑定type和对应的函数,OnDpMessage进行消息分发,有map构成消息消费者
时间: 2024-11-06 19:13:41 浏览: 15
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
好的,我们可以设计一个C++的通用消息订阅者类,名为`MessageDispatcher`,它包含初始化、添加订阅者、发送消息以及维护消息消费者的映射。以下是基于上述描述的伪代码:
```cpp
// 定义一个模板类,用于支持不同类型的message
template <typename MessageType>
class MessageDispatcher {
private:
// 使用std::map存储消息类型到处理函数的映射
std::map<TriggerType, std::vector<std::function<void(MessageType)>> consumers;
public:
// 构造函数,初始化消息订阅器
MessageDispatcher() {}
// 初始化方法,用于注册默认行为(可选)
void init() {
// 可以在这里添加默认消息处理逻辑,如果没有则不需要
}
// 添加订阅者方法,将消息类型和处理函数关联起来
void AddSubscriber(const TriggerType& type, std::function<void(MessageType)> callback) {
consumers[type].push_back(callback);
}
// 发布消息方法,向所有订阅该消息类型的人发送消息
template <typename T>
void OnDpMessage(T message) {
for (const auto& [type, callbacks] : consumers) {
if (type == dynamic_cast<const TriggerType&>(message.GetType())) { // 检查消息类型是否匹配
for (auto& callback : callbacks) {
callback(message); // 调用相应处理函数
}
}
}
}
};
```
在这个设计中,`TriggerType`是消息类型的具体表示,`MessageType`是模板参数,用来替换实际的消息类型。`OnDpMessage`方法根据消息类型查找并执行相应的处理函数。
相关问题:
1. 这个类如何在具体的项目中使用?
2. 如何确保在发布消息时能够正确找到并调用对应处理函数?
3. 对于不同类型的消息,如果不想写多个`AddSubscriber`,是否有更好的解决方案?
阅读全文