5

考虑:

enum Test
{
    a = 3,
    b = 7,
    c = 1
};

我想使用索引访问枚举。像这样的东西:

for (i=0; i<n; i++)
    doSomething((Test)i);

我怎么能做这样的事情,我将能够使用索引访问枚举,尽管枚举的成员具有不同的值?

4

4 回答 4

13

这是你能做的最好的:

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]);

您必须自己维护映射。

于 2012-04-19T16:47:32.157 回答
3

您的问题表明您并不真正了解枚举的用途。

它不是可以索引的东西,也没有任何理由这样做。您定义的实际上只是 3 个名为ab和的常量c,它们的值分别是371

于 2012-04-19T16:48:17.473 回答
3

你不能那样做。AC 枚举只不过是一堆常量。在 C# 或 Java 中可能没有类型安全或反射enum

于 2012-04-19T16:47:01.233 回答
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] );
}
于 2012-04-19T17:48:57.583 回答