【发布时间】:2013-06-17 05:00:41
【问题描述】:
在 C++ 中迭代具有连续值的枚举的首选 simple 方法是什么?我发现以前关于这个主题的 SO 问题涉及创建自定义 operator++ 等,但这似乎有点矫枉过正。到目前为止,我想出的最好的是:
enum {
FOO,
BAR,
BLECH,
NUM_ENUMS
} MyEnum;
//for (MyEnum m = FOO; m < NUM_ENUMS; ++m) // compile error
// ...
//for (MyEnum m = FOO; m < NUM_ENUMS; m = m + 1) // compile error
// ...
for (MyEnum m = FOO; m < NUM_ENUMS; m = MyEnum(m + 1)) // OK ?
...
从编码风格的角度来看,这是否合理,是否会产生警告(g++ -Wall ... 似乎对此很满意)?
【问题讨论】:
-
也许一个附带的问题是你为什么要迭代一个枚举,如果你真的这样做,有没有更好的方法来表示命名值进行迭代?如何使用 std::map 容器
-
这很好,因为您没有为元素定义自定义值,在它们之间留下空格(例如:FOO = 1,BAR = 5,BLECH = 7)
-
你的第三次尝试应该没问题(见this answer)
-
我也一直想知道如何迭代枚举:Using enum in loops and value consistency
-
有一个库Better Enums 提供您正在寻找的功能。它还允许将枚举解释为字符串,以及许多其他功能。开发人员声称它可能会进入 C++17 功能集。