2012-05-14 106 views
2

的下一個值,我有以下問題:如何獲得枚舉

enum Language { English, French, German, Italian, Spanish }; 

    int main() { 

    Language tongue = German; 
    tongue = static_cast<Language>(tongue + 1); 

     cout << tongue;     

} 

//返回3 .....但我想對指數3 .....

語言名稱
+2

如果你使用的指數,爲什麼不'的std :: array'或'的std :: VECTOR'?如果你希望你的索引有意義(不只是連續的整數),那麼'std :: map'是一個很好的選擇。 – chris

+0

你能否爲我編譯它,因爲我不熟悉C++語法 –

+0

我只想獲得下一個枚舉值,如果我提供前一個。 –

回答

3

我發現一個明確的查找表的效果最好,從枚舉都轉換爲文本和文本枚舉:

enum Language_Enum 
{ 
    LANGUAGE_FIRST = 0, 
    LANGUAGE_GERMAN = LANGUAGE_FIRST, 
    LANGUAGE_ENGLISH, 
    LANGUAGE_HOPI, 
    LANGUAGE_WELSH, 
    LANGUAGE_TEXAN, 
    LANGUAGE_DUTCH, 
    LANGUAGE_LAST 
}; 

struct Language_Entry 
{ 
    Language_Enum id; 
    const char * text; 
}; 

const Language Entry language_table[] = 
{ 
    {LANGUAGE_GERMAN, "German"}, 
    {LANGUAGE_HOPI, "Hopi"}, 
    {LANGUAGE_DUTCH, "Dutch"}, 
    // ... 
}; 
const unsigned int language_table_size = 
    sizeof(language_table)/sizeof(language_table[0]); 

指定enum以及文本,允許枚舉次序改變,對搜索引擎的影響最小。

LANGUAGE_FIRSTLANGUAGE_LAST標識符允許枚舉的迭代:

Language_Enum l; 
for (l = LANGUAGE_FIRST; l < LANGUAGE_LAST; ++l) 
{ 
    // ... 
} 
2

在C++中打印給定枚舉值的枚舉名並不那麼簡單。相反,您可以使用映射或字符串數​​組來保存這些值,這可以讓您獲取索引和字符串值。

+0

是否有可能通過提供枚舉名稱來獲取索引值,反之亦然 –

+0

@GhazanfarAli,你可以使用'std :: distance'與迭代器或地址來做到這一點,但在這種情況下,它會更容易像正常循環一樣數組,使用索引標記。 – chris

+0

這條線會輸出什麼信息舌= static_cast (1); COUT <<舌; –

3

您必須創建一個與您的枚舉相匹配的字符串數組,例如

std::string[] LangTxt = { "English", "French", "German", "Italian", "Spanish" }; 

,那麼你可以參考它們如下:

cout << LangTxt[tongue]; 

要小心,以保持在一起,雖然讓他們並排更新方的定義。

+0

我總是想知道爲什麼第一篇文章總是起來投票,但後來的文章幾乎是相似的! – tuxuday

+0

@tuxuday:正是因爲這個? –

0

最好的使用枚舉的方法是首先給你的枚舉初始值。 枚舉TestEnum { 零= 0, 一,二 } 即使 你不會指定任何默認的起始索引是零。 來獲取值在一個特定的指數簡單做

TestEnum(index); 
+0

但是,您可以輸出的所有內容仍然是使用枚舉的索引。 – chris