使用索引的枚舉考慮:訪問用C
enum Test
{
a = 3,
b = 7,
c = 1
};
我想用一個索引來訪問枚舉。事情是這樣的:
for (i=0; i<n; i++)
doSomething((Test)i);
我怎麼可以做這樣的事情,在這裏我將能夠訪問使用索引的枚舉,但枚舉的成員有不同的價值觀?
使用索引的枚舉考慮:訪問用C
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]);
你必須自己保持的映射。
你不能那樣做。一個C枚舉不僅僅是一堆常量。沒有類型安全或反思,你可能會得到一個C#或Java enum
。
你的問題表明你不明白什麼是枚舉。
這不是可以索引的東西,也沒有任何理由。你所定義的實際上只是3個常量,分別命名爲a
,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]);
}
是的,但與枚舉不同,您必須指定值的類型。您還必須確保索引不會高於單元格的數量。 – user2284570 2015-03-28 19:33:29
爲什麼你兩次發佈相同的確切問題? – houbysoft 2012-04-19 16:46:08
看看這個http://stackoverflow.com/questions/10183323/working-with-enums-in-cc/10183382#comment13070000_10183382 – twain249 2012-04-19 16:46:56
演員,如果它是有道理的(它不)應該是'枚舉測試' – ShinTakezou 2012-04-19 16:51:17