- 背景资料:
C ++ 11中有一个类称为枚举类,您可以在其中存储变量。但是,我只看到类的类型为char:
enum class : char {
v1 = 'x', v2 = 'y'
};
- 问题:
有什么方法可以表达这个字符串类型的枚举类吗?
例如,
enum class : string{
v1 = "x", v2 = "y"
};
- 我的想法:
我尝试过使用它,但是我遇到了错误,我不确定我是否做得对。我想使用字符串的原因是它们能够同时保存多个字符,因此它对我的代码更有用。
答案 0 :(得分:6)
在C ++ 11或C ++ 14中无法做到这一点。但是,你应该考虑使用一些enum class,然后编写一些显式函数或运算符来将它转换为std::string
- s。
C ++ 11中有一个类称为枚举类,您可以在其中存储变量。
该措辞不正确:枚举类不存储变量(但枚举数)。
所以你可以编码:
enum class MyEnum : char {
v1 = 'x', v2 = 'y'
};
(这可能是answered by druckermanly,因为char
是整数类型;当然你不能使用字符串代替)
然后定义一些MyEnum string_to_MyEnum(const std::string&);
函数(如果参数是一个意外的字符串,可能会抛出一些异常)和另一个std::string MyEnum_to_string(MyEnum);
函数。您甚至可以考虑让一些cast operator调用它们(但在您的情况下,我发现它不可读)。您还可以定义一个class MyEnumValue
,其中包含MyEnum
类型的单个数据成员,并且该类具有cast operator,例如
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
中添加适当的更多内容(请参阅rule of five),您几乎总是使用MyEnumValue
代替MyEnum
(这可能甚至可能是{{1}内部的class MyEnumValue
}})
答案 1 :(得分:3)
不,这是不可能的。
http://en.cppreference.com/w/cpp/language/enum州:
常量的值是整数类型的值,称为枚举的基础类型。
关键点是“整数类型” - 字符串不是整数类型。
答案 2 :(得分:0)
编译器在内部将您的char转换为其等效的int表示(ASCII)。所以不可能使用字符串。