Pau*_*l R 16 c++ enums for-loop
在C++中使用连续值迭代枚举的首选简单方法是什么?我之前发现了关于这个主题的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 ?
...
Run Code Online (Sandbox Code Playgroud)
从编码风格的角度看这是否合理,是否可能产生警告(g++ -Wall ...对此感到高兴)?
Mat*_* M. 14
这确实很安全.
这可能是未定义的:MyEnum(int(NUM_ENUMS) + 1)因为hold(4)的值将大于枚举可以表示的值([0,3]); 因为你确保m严格低于NUM_ENUMS使用安全MyEnum(m + 1).
另一方面,请注意您会遇到自定义枚举的问题,例如:
enum OtherEnum {
Foo = -1,
Bar = 2,
Baz = 8,
NUM_OTHERENUM
};
Run Code Online (Sandbox Code Playgroud)
所以这不是一般做法.
我会建议生成的数组迭代:
MyEnum const Values[] = { FOO, BAR, BLECH };
Run Code Online (Sandbox Code Playgroud)
请注意,它很容易从枚举的定义中生成,并且还避免使用无意义的值(业务方面)污染接口.