Kou*_*osh 8 c++ c++11 enum-class
- 背景资料:
C++ 11中有一个类称为枚举类,您可以在其中存储变量.但是,我只看到类的类型为char:
enum class : char {
v1 = 'x', v2 = 'y'
};
Run Code Online (Sandbox Code Playgroud)
- 题:
有什么方法可以表达这个类型字符串的枚举类吗?
例如,
enum class : string{
v1 = "x", v2 = "y"
};
Run Code Online (Sandbox Code Playgroud)
- 我的想法:
我尝试使用它,但是我遇到了错误,我不确定我是否做得对.我想使用字符串的原因是它们能够同时保存多个字符,因此它对我的代码更有用.
在C++ 11或C++ 14中无法做到这一点.但是,你应该考虑使用一些枚举类,然后编写一些显式函数或运算符来将它转换为std::string-s.
C++ 11中有一个类称为枚举类,您可以在其中存储变量.
这句话不正确:枚举类不存储变量(而是枚举器).
所以你可能编码:
enum class MyEnum : char {
v1 = 'x', v2 = 'y'
};
Run Code Online (Sandbox Code Playgroud)
(这是可能的,正如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....
};
Run Code Online (Sandbox Code Playgroud)
有了更多的东西MyEnumValue(参见五条规则)你可能几乎总是使用MyEnumValue而不是MyEnum(也许甚至可能是内部的class MyEnumValue)
不,这是不可能的。
http://en.cppreference.com/w/cpp/language/enum指出:
常量的值是称为枚举基础类型的整数类型的值。
关键点是“整数类型”——字符串不是整数类型。