Pure238 2025-05-12 20:04 采纳率: 60%
浏览 4

提问 C++跨平台键值映射

我现在在做一个键值映射,然后现在有一个自己项目的键值,想做和其他输入平台(glfw、win、x11等)的键值的转换

我是用conexper uint32_t定义的自己项目的键值,而glfw用的是宏定义,这个相互转化会不会有影响

switch语句不能处理别名的情况,所以有没有其他更合适的方法(使用map可能会好点?但是不知道对性能会不会有比较大影响)

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-05-12 20:04
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    C++跨平台键值映射

    你遇到的问题是,使用 switch 语句来处理键值映射,但是遇到了别名的情况无法处理。这个问题可以使用 map 来解决。

    在 C++ 中,你可以使用 std::mapstd::unordered_map 来实现键值映射。这些容器可以将键映射到对应的值。

    例如:

    #include <map>
    #include <string>
    
    std::map<std::string, int> keyMap = {
        {"key1", 1},
        {"key2", 2},
        {"key3", 3}
    };
    
    int main() {
        std::string key = "key2";
        if (keyMap.find(key) != keyMap.end()) {
            int value = keyMap[key];
            // 处理 value
        }
        return 0;
    }
    

    在上面的示例中,我们使用 std::map 来创建一个键值映射,然后使用 find 方法来查找指定的键,如果找到,则获取对应的值。

    使用 map 可以解决别名的情况,因为 map 可以将同一个键映射到不同的值。

    如果你需要跨平台键值映射,可以使用一个头文件来定义键值映射,然后在不同的平台上使用不同的实现方式来实现键值映射。

    例如,在 Windows 平台上,你可以使用 HKEY 来实现键值映射:

    #include <windows.h>
    
    HKEY keyMap[] = {
        {"key1", 1},
        {"key2", 2},
        {"key3", 3}
    };
    
    int main() {
        // 使用 HKEY 来实现键值映射
        return 0;
    }
    

    在 Linux 平台上,你可以使用 glib 库来实现键值映射:

    #include <glib.h>
    
    GHashTable* keyMap = g_hash_table_new(g_str_hash, g_str_equal);
    
    int main() {
        // 使用 GHashTable 来实现键值映射
        return 0;
    }
    

    总的来说,使用 map 可以解决键值映射的问题,并且可以跨平台实现键值映射。

    评论

报告相同问题?

问题事件

  • 修改了问题 5月12日
  • 创建了问题 5月12日