gpt4 book ai didi

c++ - C++ 中字符串类型的枚举类

转载 作者:可可西里 更新时间:2023-11-01 17:40:00 25 4
gpt4 key购买 nike

- 背景信息:

C++11 中有一个类,称为枚举类,您可以在其中存储变量。但是,我只看到类的类型是 char:

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

- 问题:

有什么方法可以表达这个字符串类型的枚举类?

例如,

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

- 我的想法:

我尝试使用它,但出现错误,我不确定我是否做对了。我想使用字符串的原因是它们能够同时保存多个字符,所以这对我的代码更有用。

最佳答案

在 C++11 或 C++14 中无法做到这一点。但是,您应该考虑使用一些 enum class ,然后编写一些显式函数或运算符以将其与 std::string-s 相互转换。

There is a class in C++11 known as enum class which you can store variables inside.

该措辞不正确:枚举类不存储变量(但枚举数)。

所以你可以编码:

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 (这可能甚至是 class MyEnumValue)

的内部

关于c++ - C++ 中字符串类型的枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com