考虑:
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
、7
和1
。
你不能那样做。AC 枚举只不过是一堆常量。在 C# 或 Java 中可能没有类型安全或反射enum
。
正如其他人提到的,这不是枚举的目的。为了做你所要求的,你可以简单地使用一个数组:
#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] );
}