【问题标题】:Define Enum with strong-typedef CPP使用强类型定义 CPP 定义枚举
【发布时间】:2020-12-31 08:47:52
【问题描述】:

在定义网络消息结构时:

  1. 希望将 Op 字段保存为枚举(以限制允许的值)。
  2. 需要将所有字段保持为无符号,并且 Op 具体为 uint32_t。

有没有办法结合这些要求? 就像是: typedef enum Op : uint32_t {save = 100, retrieve = 101, delete = 200};

【问题讨论】:

  • "100" "101" "200 这些字符串是什么意思?你想在枚举中使用字符串作为枚举数吗?
  • enum class ?我不知道你想要什么。
  • 主要是希望缩小允许的值 --> 枚举 ---> 字符串。将不胜感激其他建议。谢谢你。 open-std.org/JTC1/SC22/wg21/docs/papers/2016/p0138r2.pdf
  • @Sprite,我在您的 Q 之后编辑了枚举。谢谢。
  • 不清楚你想要什么,如果它是一个具有特定类型的枚举,那么你在 C++11 上就有这样的:enum name : type { enumerator = constexpr , enumerator = constexpr , ... }

标签: c++ enums typedef strongly-typed-enum


【解决方案1】:

"100" "101" "200

嗯,我不太明白这些字符串是什么意思?你的问题我不是很清楚。

听起来你想要的是enum class (Scoped enumerations)。

enum class Op : uint32_t
{
    _100 = 100,
    _101 = 101,
    _200 = 200
};

限制允许的值

是的。

需要将所有字段保持为无符号,并且Op具体为uint32_t。

是的。

您应该将这些枚举器命名为有意义的名称,而不是与值相同。


根据您编辑的帖子:

enum class Op : uint32_t
{
    save = 100,
    retrieve = 101,
    delete_ = 200
};

【讨论】:

  • 太好了,谢谢!
猜你喜欢
  • 2012-03-10
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多