繁体   English   中英

如何在 C++98 中遍历枚举的所有元素

[英]How to iterate over all elements of an enum in C++98

参考这个问题,我问,在 C++98 中迭代所有枚举值的最佳方法是什么(通常是最不容易出错的方法)?

C++98 的限制:

  • 没有枚举类
  • 没有 foreach 循环

解决方案中应该避免什么(我很确定,并非所有事情都可以避免):

  • A) 掩蔽标准语言功能的宏(例如#define CREATE_ENUM(...)
  • B) 包括其他标题
  • C) 代码重复
  • D)仅为迭代添加枚举元素
  • E) 对枚举布局的假设(例如,总是递增 1,最后一个元素总是 XXX)

没有办法实现你所有的 A..E。 您可以实现:

  • BCDE 通过使用宏(例如#define CREATE_ENUM(...) )。
  • ABDE 通过将所有元素存储在数组中
  • ABC 仅使用从 0 开始的结果并添加额外的元素来表示计数(如此处所示)或更一般地,可以表示为数学序列的值。

请注意,就当前 C++ 标准中的这些点而言,枚举类和 range-for 循环都不会带来任何可以扩大您选择的东西。

那个时候通常的技巧是这样做:

enum Foo {
  One,
  Two,
  Three,
  Last,
  MAX_FOO_ENUM
};

for( int it = One; it < MAX_FOO_ENUM; ++it )
...

当然,只有在 Foo 中没有跳过时,它才能正确工作。 除非您定义某种容器,其中的元素等于 Foo 的每个值,否则您无法正确执行此操作,但对于以后的标准也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM