我刚刚注意到,你不能在一个枚举上使用标准的数学运算符,如++或+=。
那么,在C++枚举中遍历所有数值的最佳方法是什么?
典型的方式如下:
enum Foo {
One,
Two,
Three,
Last
};
for ( int fooInt = One; fooInt != Last; fooInt++ )
{
Foo foo = static_cast<Foo>(fooInt);
// ...
}
请注意,"Last "这个枚举是为了被迭代跳过。利用这个"假"Last
枚举,你不必在每次想添加新枚举时,将for循环中的终止条件更新为最后的"真"枚举。
如果你以后想添加更多的枚举,只需在Last之前添加它们。这个例子中的循环仍然可以工作。
当然,如果枚举值是指定的,这就失效了:
enum Foo {
One = 1,
Two = 9,
Three = 4,
Last
};
这说明枚举并不是真的用来迭代的。处理枚举的典型方法是在switch语句中使用它。
switch ( foo )
{
case One:
// ..
break;
case Two: // intentional fall-through
case Three:
// ..
break;
case Four:
// ..
break;
default:
assert( ! "Invalid Foo enum value" );
break;
}
如果你真的想枚举,可以把枚举值塞到一个向量中,然后对其进行迭代。这也会正确处理指定的枚举值。