C 中的枚举类型字符串类别
enum class of type string in C++
- 背景信息:
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(。因此,不可能使用字符串。
- 如何检查模板类中的变量是否为字符串类型?
- C++类字符串类型的迭代器
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 字符串类型的 2d 数组(C++;)
- 在 Rcpp 中的字符串类型之间转换时出错
- 为什么字符串类型会导致 c++ 程序无法运行?
- 如何将字符串类型转换为 ostringstream
- 当正斜杠运算符应用于C++中的字符串类型时,它会做什么
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 我在 c++ 中声明字符串类型时遇到问题
- 对齐C++字符串类型问题 std::字符串到 TStr
- C++无符号字符串类型的正则表达式
- 当 JSON 值应为 INT 但以字符串类型发送时,RapidJSON 崩溃
- 如何使用 std::find 从向量的第一个元素中查找字符串<字符串对<字符串、字符串> >类型?
- 我想添加两个字符串类型的矩阵.用户将不会输入行数或列的数量.用户将仅输入数组
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何根据定义的字符串类型在“std::cout”和“std::wcout”之间进行选择
- C++ 仅当模板为字符串类型时执行小写转换
- 字符串类型的 C++ 模板无法编译
- 如何使用新字符串而不是分配器创建自己的字符串类型向量?