我有两种enum class类型:Type和SocketType。在VC++ 2017中,以下代码将无法编译且失败,并出现问题中提到的消息:

static constexpr std::map<Type,SocketType> PacketTypeMap =
    {
        {Type::JUSTJOINED,      SocketType::TCP},
        {Type::CHAT_MESSAGE,    SocketType::TCP},
        {Type::REQUEST_WORLD,   SocketType::TCP},
        {Type::DATA_WORLD,      SocketType::TCP},
        {Type::DATA_PLAYER,     SocketType::UDP},
        {Type::RESPAWN_PLAYER,  SocketType::TCP}
    };

一直在尝试一些变体,但没有任何效果,但是我敢肯定我只是在语法上缺少一些简单的东西。

最佳答案

std::mapconstexpr不兼容。存在一个称为frozen的实验性(?)库,该库提供了constexpr兼容的frozen::map(除了frozen::unordered_mapfrozen::string等)。

但是,很可能您只是想选择一个更简单的解决方案(例如,constexpr函数中的switch语句)。

10-06 05:24