【发布时间】:2021-01-05 09:10:22
【问题描述】:
引用this 的问题,我问,在 C++98 中迭代所有枚举值的最佳方法是什么(一般来说,最不容易出错的方法)?
C++98 的局限性:
- 没有枚举类
- 没有 foreach 循环
解决方案中应该避免什么(我很确定,不是所有事情都可以避免):
- A) 掩码标准语言功能的宏(例如
#define CREATE_ENUM(...)) - B) 包括其他标题
- C) 代码重复
- D) 仅为迭代添加枚举元素
- E) 枚举布局假设(例如,始终递增 1,最后一个元素始终为 XXX)
【问题讨论】:
-
这个问题(以及链接的问题)似乎是基于错误的假设,即所有可能的枚举元素都是在定义枚举时在
{ }之间列出的元素。 -
@user7860670 有趣!你能提供一个稍后如何指定枚举元素的例子吗?
-
例如,如果您有
enum t_Values { a /* 0 */, b /* 1 */, c /* 2 */ };,那么即使未列出,3 也是有效的枚举值。 -
好吧,如果我们接受所有适合枚举的内容,我们可以从 INT_MIN 循环到 INT_MAX。我的意图确实是,遍历枚举定义中声明的所有元素。
-
“如果我们接受所有适合枚举的内容,我们就可以从 INT_MIN 循环到 INT_MAX” - 不是真的。迭代枚举定义中列出的命名值与迭代任何其他任何类型的已知值组没有什么不同。