検討:
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]);
マッピングを自分で維持する必要があります。
あなたはそれをすることはできません。AC列挙型は、定数の束にすぎません。C#やJavaで得られるような型安全性やリフレクションはありませんenum
。
あなたの質問は、列挙型が何のためにあるのか本当に理解していないことを示しています。
インデックスを作成できるものではなく、その理由もありません。定義したのは、実際には、、、およびという名前a
の3つの定数b
でありc
、その値はそれぞれ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] );
}