我有两种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}
};
尝试过一些变体但没有任何效果,但是我确定我只是缺少语法方面的简单内容。
答案 0 :(得分:1)
将答案从评论部分迁移到答案部分。
没有constexpr映射。它使用动态分配,而constexpr则无法实现。摆脱constexpr,或将其他容器用于编译类型映射。
答案 1 :(得分:1)
std::map
与constexpr
不兼容。有一个名为frozen的实验性(?)库,它提供了constexpr
兼容的frozen::map
(frozen::unordered_map
,frozen::string
等除外)。>
但是,很可能您只是想选择一个更简单的解决方案(例如constexpr函数中的switch
语句)。