MST

星途 面试题库

面试题:C++ 非 MFC 环境下消息映射的设计与实现

假设我们不使用 MFC 框架,尝试设计并实现一个简单的消息映射机制,要求能够处理不同类型的消息,描述设计思路并给出关键代码片段。
35.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义消息结构体:用于封装消息相关信息,如消息类型、参数等。
  2. 消息映射表:使用数据结构(如哈希表)来存储消息类型与对应的处理函数之间的映射关系。
  3. 消息分发函数:根据接收到的消息类型,从映射表中查找并调用相应的处理函数。

关键代码片段

// 定义消息结构体
struct Message {
    int msgType;
    // 可以添加更多参数,这里简单示例
    int param;
};

// 定义消息处理函数指针类型
using MessageHandler = void(*)(const Message&);

// 消息映射表
std::unordered_map<int, MessageHandler> messageMap;

// 注册消息处理函数
void RegisterMessageHandler(int msgType, MessageHandler handler) {
    messageMap[msgType] = handler;
}

// 消息分发函数
void DispatchMessage(const Message& msg) {
    auto it = messageMap.find(msg.msgType);
    if (it != messageMap.end()) {
        it->second(msg);
    } else {
        // 处理未注册消息的情况
        std::cout << "Unhandled message type: " << msg.msgType << std::endl;
    }
}

// 示例消息处理函数
void HandleMessage1(const Message& msg) {
    std::cout << "Handling message 1 with param: " << msg.param << std::endl;
}

// 测试代码
int main() {
    // 注册消息处理函数
    RegisterMessageHandler(1, HandleMessage1);

    // 构造消息
    Message msg;
    msg.msgType = 1;
    msg.param = 100;

    // 分发消息
    DispatchMessage(msg);

    return 0;
}