如何获得枚举的下一个值

时间:2012-05-14 13:01:45

标签: c++ enums

我有以下问题:

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

    int main() {

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

      cout << tongue;                  

}

//它返回3 .....但我想在索引3上获取语言名称.....

4 个答案:

答案 0 :(得分:3)

你必须创建一个与你的枚举相匹配的字符串数组,例如

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

然后您可以按如下方式引用它们:

cout << LangTxt[tongue];

小心将这些定义保持在一起,但它们会并排更新。

答案 1 :(得分:3)

我发现明确的查找表最适合从enum转换为text和text到enum:

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 :(得分:2)

在C ++中打印给定枚举值的枚举名称并不是那么简单。相反,您可以使用映射或字符串数​​组来保存值,这样可以同时获取索引和字符串值。

答案 3 :(得分:0)

使用枚举的最佳方法是首先给你的枚举初始值。 枚举TestEnum {     零= 0,     一,     二 } 即使您不指定任何默认起始索引为零。 要获得特定索引的值,请执行此操作

TestEnum(index);