的下一個值,我有以下問題:如何獲得枚舉
enum Language { English, French, German, Italian, Spanish };
int main() {
Language tongue = German;
tongue = static_cast<Language>(tongue + 1);
cout << tongue;
}
//返回3 .....但我想對指數3 .....
語言名稱的下一個值,我有以下問題:如何獲得枚舉
enum Language { English, French, German, Italian, Spanish };
int main() {
Language tongue = German;
tongue = static_cast<Language>(tongue + 1);
cout << tongue;
}
//返回3 .....但我想對指數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_FIRST
和LANGUAGE_LAST
標識符允許枚舉的迭代:
Language_Enum l;
for (l = LANGUAGE_FIRST; l < LANGUAGE_LAST; ++l)
{
// ...
}
在C++中打印給定枚舉值的枚舉名並不那麼簡單。相反,您可以使用映射或字符串數組來保存這些值,這可以讓您獲取索引和字符串值。
是否有可能通過提供枚舉名稱來獲取索引值,反之亦然 –
@GhazanfarAli,你可以使用'std :: distance'與迭代器或地址來做到這一點,但在這種情況下,它會更容易像正常循環一樣數組,使用索引標記。 – chris
這條線會輸出什麼信息舌= static_cast
您必須創建一個與您的枚舉相匹配的字符串數組,例如
std::string[] LangTxt = { "English", "French", "German", "Italian", "Spanish" };
,那麼你可以參考它們如下:
cout << LangTxt[tongue];
要小心,以保持在一起,雖然讓他們並排更新方的定義。
我總是想知道爲什麼第一篇文章總是起來投票,但後來的文章幾乎是相似的! – tuxuday
@tuxuday:正是因爲這個? –
最好的使用枚舉的方法是首先給你的枚舉初始值。 枚舉TestEnum { 零= 0, 一,二 } 即使 你不會指定任何默認的起始索引是零。 來獲取值在一個特定的指數簡單做
TestEnum(index);
但是,您可以輸出的所有內容仍然是使用枚舉的索引。 – chris
如果你使用的指數,爲什麼不'的std :: array'或'的std :: VECTOR'?如果你希望你的索引有意義(不只是連續的整數),那麼'std :: map'是一個很好的選擇。 – chris
你能否爲我編譯它,因爲我不熟悉C++語法 –
我只想獲得下一個枚舉值,如果我提供前一個。 –