C++ 消息分发类:详细示例应用
消息分发的概念
消息分发(Message Dispatching)是一种设计模式,广泛用于处理异步事件和消息。在 C++ 中,消息分发类通常用来接收和分发来自多个源的消息(如网络连接、传感器数据、用户输入等),并根据消息类型将其发送给相应的处理器(Handler)或回调函数。
C++ 消息分发类的示例
假设我们有一个简单的应用程序,它接收来自不同来源的消息(如传感器数据或用户命令),并将这些消息分发给不同的处理器进行处理。
以下是一个简化的 C++ 消息分发类的实现:
#include
#include
#include <unordered_map>
#include
// 定义消息处理函数类型
using MessageHandler = std::function<void(const std::string&)>;
class MessageDispatcher {
public:
// 注册消息处理器
void registerHandler(const std::string& messageType, MessageHandler handler) {
handlers_[messageType] = handler;
}
// 分发消息
void dispatch(const std::string& messageType, const std::string& message) {
auto it = handlers_.find(messageType);
if (it != handlers_.end()) {
it->second(message); // 调用处理函数
} else {
std::cout << "No handler for message type: " << messageType << std::endl;
}
}
private:
std::unordered_map<std::string, MessageHandler> handlers_; // 消息处理器映射表
};
// 示例处理函数
void handleSensorData(const std::string& data) {
std::cout << "Processing sensor data: " << data << std::endl;
}
void handleUserCommand(const std::string& command) {
std::cout << "Processing user command: " << command << std::endl;
}
int main() {
MessageDispatcher dispatcher;
// 注册不同类型的消息处理器
dispatcher.registerHandler("sensor", handleSensorData);
dispatcher.registerHandler("command", handleUserCommand);
// 模拟消息分发
dispatcher.dispatch("sensor", "Temperature: 25°C");
dispatcher.dispatch("command", "Turn on the light");
dispatcher.dispatch("unknown", "Some unknown message");
return 0;
}
示例解释
MessageDispatcher 类维护一个消息类型到消息处理函数的映射表(handlers_),并提供 registerHandler 方法注册新的消息处理器。
dispatch 方法根据消息类型找到对应的处理函数并调用它。
main 函数中,我们注册了两个处理函数(handleSensorData 和 handleUserCommand)并分发一些示例消息。
应用场景
物联网(IoT)设备控制:根据不同传感器或设备的消息类型,分发给不同的处理器进行响应。
网络服务器:根据不同的客户端请求类型(如 HTTP GET、POST、WebSocket 消息)分发给不同的处理逻辑。
游戏开发:将玩家输入或游戏事件分发给相应的模块处理(如音效、动画、物理引擎等)。