在 C++11 或 C++14 中没有办法做到这一点。但是,您应该考虑拥有一些enum class,然后编写一些显式函数或运算符以将其从 -s 转换为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
)