使用C中的索引访问枚举
考虑:
enum Test { a = 3, b = 7, c = 1 };
我想使用索引访问枚举。 像这样的东西:
for (i=0; i<n; i++) doSomething((Test)i);
我怎么能做这样的事情,我可以使用索引访问枚举,虽然枚举的成员有不同的值?
这是你能做的最好的事情:
enum Test { a = 3, b = 7, c = 1, LAST = -1 }; static const enum Test Test_map[] = { a, b, c, LAST }; for (int i = 0; Test_map[i] != LAST; i++) doSomething(Test_map[i]);
你必须自己维护映射。
你的问题表明你并不真正理解枚举的含义。
它不是可以索引的东西,也没有任何理由。 您定义的实际上只是3个名为a
, b
和c
常量,其值分别为3
和1
。
你不能这样做。 AC enum不仅仅是一堆常量。 在C#或Java enum
没有类型安全或reflection。
正如其他人提到的,这不是枚举的目的。 为了做你想要的,你可以简单地使用一个数组:
#define a 3 #define b 7 #define c 1 int array[3] = { a, b, c }; int i; for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ ) { doSomething( array[i] ); }