-
慕尼黑的夜晚无繁华
典型的方法如下:enum Foo {
One,
Two,
Three,
Last};for ( int fooInt = One; fooInt != Last; fooInt++ ){
Foo foo = static_cast<Foo>(fooInt);
// ...}当然,如果指定了枚举值,这会分解: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;}如果你真的想要枚举,将枚举值填入向量中并迭代它。这也将适当地处理指定的枚举值。
-
慕容森
#include <iostream>#include <algorithm>namespace MyEnum{ enum Type { a = 100, b = 220, c = -1 }; static const Type All[] = { a, b, c };}void fun( const MyEnum::Type e ){ std::cout << e << std::endl;}int main(){ // all for ( const auto e : MyEnum::All ) fun( e ); // some for ( const auto e : { MyEnum::a, MyEnum::b } ) fun( e ); // all std::for_each( std::begin( MyEnum::All ), std::end( MyEnum::All ), fun ); return 0;}
-
红颜莎娜
如果你的枚举以0开头,则增量始终为1。enum enumType {
A = 0,
B,
C,
enumTypeEnd};for(int i=0; i<enumTypeEnd; i++){
enumType eCurrent = (enumType) i; }如果不是,我想唯一的原因就是创造类似的东西vector<enumType> vEnums;添加项目,并使用普通迭代器....