【问题标题】:How to get the enum types to string [duplicate]如何将枚举类型转换为字符串 [重复]
【发布时间】:2021-07-21 10:20:18
【问题描述】:

我有一个枚举,我想在 Switch case 条件下将这些枚举类型转换为字符串。

enum WeekEnum
{
Mon = 0;
Tue = 1;
Wed = 2;
}

std::string weekEnumToStr(int n)
{
 std::string s("unknown");
switch (n)
{
case 0: { s = "Mon"; } break;
case 1: { s = "Tue"; } break;
case 2: { s = "Wed"; } break;
}
return s;
}

所以在上面我对“Mon”进行了硬编码,而不是有一种方法可以将枚举类型直接作为字符串获取。目前,如果我在 switch case 中传递枚举类型,我得到的 id 为 0 或 1 或 2,但我需要 Mon/Tue/Wed 作为字符串

【问题讨论】:

  • 你是说你想做enum WeekEnum { Mon = "Mon", Tue = "Tue", Wed = "Wed" };?那行不通,enums 需要一个整数类型。但是,您可以在std::unordered_map<WeekEnum, std::string> 中使用enum。或者您也可以使用查找表。
  • 不,我不想要字符串中的值。我的要求是,如果我在 switch 中传递 0 或 1,我需要返回枚举类型。但是我可以在引号 "" 中传递值,但想要枚举中的确切名称
  • X-宏来拯救?尽管宏一直被指责为 C 的遗留物,不属于当代 C++,但它们可能是恰当的解决方案。

标签: c++


【解决方案1】:

您可以使用一些容器将枚举值映射到字符串。例如std::array

#include <string>
#include <array>
#include <iostream>

enum WeekEnum
{
    Mon = 0,
    Tue = 1,
    Wed = 2
};

std::array<std::string, 3> enumNames{"Mon", "Tue", "Wed"};

std::string weekEnumToStr(unsigned n)
{
    if (n < 3)
    {
        return enumNames[n];
    }
    return "unknown";
}

int main()
{
    std::cout << weekEnumToStr(Tue);
}

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 2015-11-09
    • 2012-12-07
    • 2010-12-13
    • 2018-02-14
    • 2019-02-21
    • 2011-07-02
    相关资源
    最近更新 更多