C中字符串类型的枚举类

新手上路,请多包涵

- 背景资料:

C++11 中有一个类称为枚举类,您可以在其中存储变量。但是,我只看到类的类型是 char:

 enum class : char {
   v1 = 'x', v2 = 'y'
};


- 问题:

有什么方法可以表达这个字符串类型的枚举类吗?

例如,

 enum class : string{
  v1 = "x", v2 = "y"
};


- 我的想法:

我尝试使用它,但出现错误,我不确定我是否做得对。我想使用字符串的原因是它们能够同时保存多个字符,因此它们对我的代码更有用。

原文由 Agent 0 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

在 C++11 或 C++14 中没有办法做到这一点。但是,您应该考虑使用一些 enum 类,然后编写一些显式函数或运算符以将其从和转换为 std::string -s。

C++11 中有一个类称为枚举类,您可以在其中存储变量。

该措辞不正确:枚举类不存储变量(但 _枚举数_)。

所以你可以编码:

 enum class MyEnum : char {
   v1 = 'x', v2 = 'y'
};

(这是可能的,正如 druckermanly 所回答的那样,因为 char 是一个 _整数类型_;当然你不能使用字符串代替)

然后定义一些 MyEnum string_to_MyEnum(const std::string&); 函数(如果参数是意外字符串,它可能会抛出一些异常)和另一个 std::string MyEnum_to_string(MyEnum); 一个。您甚至可以考虑让一些 演员操作员 调用它们(但在您的情况下,我认为这不可读)。您还可以定义一个 class MyEnumValue 包含一个 MyEnum 类型的单个数据成员,并让该类具有强制转换 运算符,例如

 class MyEnumValue {
    const MyEnum en;
 public:
    MyEnumValue(MyEnum e) : en(e) {};
    MyEnumValue(const std::string&s)
     : MyEnumValue(string_to_MyEnum(s)) {};
    operator std::string () const { return MyEnum_to_string(en);};
    operator MyEnum () const { return en };
    //// etc....
 };

MyEnumValue (参见 规则五)中使用适当的更多内容时,您可能几乎总是使用 MyEnumValue 而不是 MyEnum (它甚至可能是内部的 class MyEnumValue )

原文由 Basile Starynkevitch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题