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

あなたはそれをすることはできません。AC列挙型は、定数の束にすぎません。C#やJavaで得られるような型安全性やリフレクションはありませんenum

于 2012-04-19T16:47:01.233 に答える
3

あなたの質問は、列挙型が何のためにあるのか本当に理解していないことを示しています。

インデックスを作成できるものではなく、その理由もありません。定義したのは、実際には、、、およびという名前aの3つの定数bでありc、その値はそれぞれ3、、、7および1です。

于 2012-04-19T16:48:17.473 に答える
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 に答える