C 中的枚举类型字符串类别

enum class of type string in C++

本文关键字:字符串 类型 枚举      更新时间:2023-10-16

- 背景信息:

C 11中的类称为Enum类,您可以将变量存储在其中。但是,我只看到班级的类型是char:

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

- 问题:

有什么办法可以表达此枚举类型字符串?

例如,

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

- 我的想法:

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

在C 11或C 14中无法做到这一点。但是,您应该考虑拥有一些枚举类,然后编码一些明确的功能或运算符以将其转换为std::string-S。

C 11中的类称为Enum类,您可以将变量存储在其中。

措辞不正确:枚举类不存储变量(但是 enumererators (。

因此您可以代码:

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

(正如Druckermanly所回答的那样,这是可能的,因为char积分类型;当然您不能使用字符串(

然后定义一些MyEnum string_to_MyEnum(const std::string&);函数(如果参数是意外的字符串,可能会引发一些异常(,而另一个std::string MyEnum_to_string(MyEnum);。您甚至可能会考虑让一些铸造操作员称呼它们(但就您而言,我认为这是可读的(。您还可以定义一个包含MyEnum类型的单个数据成员的class MyEnumValue,并且该类带有铸造运算符,例如

 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的内部(

不,这是不可能的。

http://en.cppreference.com/w/cpp/language/enum状态:

常数的值是被称为基础类型的积分类型的值。

关键点是"积分类型" - 字符串不是积分类型。

编译器内部将您的char转换为其等效int表示(ASCII(。因此,不可能使用字符串。