【发布时间】:2022-12-07 12:11:50
【问题描述】:
我在消息头中有一个字段表示消息类型。该字段是两个字符,如“AR”。我想用一个枚举类来表示它,这样我就可以强制所有类型都在 switch 语句上处理。
在 enum class 中,我们将看到枚举的值由两个 char 值定义。但是,我很挣扎,因为它必须是constexpr。
这不会编译,但我正在寻找这样的东西:
enum class AnEnum : uint16_t
{
value_one = atoi(std::string("AR").c_str()),
value_two = atoi(std::string("PF").c_str())
};
在上面的示例中,一个消息头包含字符 AR,而另一种消息类型包含 PF。
【问题讨论】:
-
@463035818_is_not_a_number 不幸的是不是因为我想使用枚举类所以我可以强制在任何 switch 语句中传递所有类型。
-
enum 只是一个 int,你可以定义一个静态字符串数组并使用 enum 作为索引。
-
好的,但是我不明白什么是
atoi("AR")。"AR"不是整数的字符串表示形式,atoi会为这两个调用返回0 -
@463035818_is_not_a_number 我相信 OP 想要“AR”的整数编码:
std::uint16_t{'A'*256+'R'}。这将使用std::uint16_t作为枚举的基本类型与它们同步。 -
@bitmask 是的,我可以想象他们真正想要什么,但是他们用代码写的东西毫无意义;)。 @OP 请描述你想要什么。损坏的代码不能很好地解释它应该做什么,因为它只是损坏了