2012-04-19 65 views
4

使用索引的枚舉考慮:訪問用C

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

我想用一個索引來訪問枚舉。事情是這樣的:

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

我怎麼可以做這樣的事情,在這裏我將能夠訪問使用索引的枚舉,但枚舉的成員有不同的價值觀?

+1

爲什麼你兩次發佈相同的確切問題? – houbysoft 2012-04-19 16:46:08

+0

看看這個http://stackoverflow.com/questions/10183323/working-with-enums-in-cc/10183382#comment13070000_10183382 – twain249 2012-04-19 16:46:56

+0

演員,如果它是有道理的(它不)應該是'枚舉測試' – ShinTakezou 2012-04-19 16:51:17

回答

10

這是你能做的最好的:

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

你必須自己保持的映射。

2

你不能那樣做。一個C枚舉不僅僅是一堆常量。沒有類型安全或反思,你可能會得到一個C#或Java enum

5

你的問題表明你不明白什麼是枚舉。

這不是可以索引的東西,也沒有任何理由。你所定義的實際上只是3個常量,分別命名爲a,bc,其值分別爲3,71

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]); 
} 
+0

是的,但與枚舉不同,您必須指定值的類型。您還必須確保索引不會高於單元格的數量。 – user2284570 2015-03-28 19:33:29