考虑:
enum Test
{
a = 3,
b = 7,
c = 1
};
我想使用索引访问枚举。像这样:
for (i=0; i<n; i++)
doSomething((Test)i);
我怎么能做这样的事情,我可以使用索引访问枚举,虽然枚举的成员有不同的值?
答案 0 :(得分:11)
这是你能做的最好的事情:
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]);
您必须自己维护映射。
答案 1 :(得分:5)
您的问题表明您并不真正了解枚举的用途。
这不是可以编入索引的东西,也没有任何理由可以。您定义的实际上只有3个名为a
,b
和c
的常量,其值为3
,7
和1
分别
答案 2 :(得分:3)
你做不到。 C enum不仅仅是一堆常量。您可能无法在C#或Java enum
中获得类型安全或反射。
答案 3 :(得分:2)
正如其他人提到的,这不是枚举的目的。为了做你想要的,你可以简单地使用一个数组:
#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] );
}