使用C中的索引访问枚举
考虑:使用C中的索引访问枚举,c,enums,indexing,C,Enums,Indexing,考虑: enum Test { a = 3, b = 7, c = 1 }; 我想使用索引访问枚举。大概是这样的: for (i=0; i<n; i++) doSomething((Test)i); for(i=0;i你不能这么做。C枚举只不过是一堆常量。在C#或Java枚举中没有类型安全或反射,这是你能做的最好的: enum Test { a = 3, b = 7, c = 1, LAST = -1 }; static const enum Test
enum Test
{
a = 3,
b = 7,
c = 1
};
我想使用索引访问枚举。大概是这样的:
for (i=0; i<n; i++)
doSomething((Test)i);
for(i=0;i你不能这么做。C枚举只不过是一堆常量。在C#或Java枚举中没有类型安全或反射,这是你能做的最好的:
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]);
您必须自己维护映射。您的问题表明您并不真正理解枚举的用途
它不是可以索引的东西,也没有任何理由。您定义的实际上只是名为a
、b
和c
的3个常量,它们的值分别是3
、7
和1
。正如其他人提到的,这不是枚举的目的按照您的要求,您可以简单地使用数组:
#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] );
}
#定义一个3
#定义b7
#定义c1
int数组[3]={a,b,c};
int i;
对于(i=0;i
为什么要两次发布相同的问题?看看这个cast,如果它有意义(或者没有意义),应该是enum Test
是,但与enum不同,您必须为值指定一个类型。您还必须确保索引不会高于单元格数。