从班级访问枚举成员

时间:2020-05-18 13:35:29

标签: c++

因此,请考虑以下结构:

struct CType
{
    enum DType
    {
        Int,
        Char
    } Type;

    union Value
    {
        int num;
        char alpha;

        Value() {
            this->num = 0;
            this->alpha = '\0';
        };
        ~Value() {};
    } value;
};

我该怎么做?

CType u3;
u3.Type = CType::Int;

以上为什么起作用?

我本可以这样做:

u3.Type = CType::DType::Int;

谢谢。

2 个答案:

答案 0 :(得分:3)

DType是一个无范围的枚举,在其范围内可见:

无范围枚举(重点是我的)-C ++ 11之前的版本:

每个枚举器都成为枚举类型(即名称)的命名常量,在封闭范围内可见,并且可以在需要常量时使用。

您正在寻找作用域枚举(自C ++ 11起可用):

每个枚举器成为枚举类型(即名称)的命名常量,包含在枚举范围内,并且可以使用范围解析运算符进行访问。尽管可以使用static_cast获取枚举器的数值,但从范围限定的枚举器的值到整数类型没有隐式转换。

请参阅文档:https://en.cppreference.com/w/cpp/language/enum

因此,DType作为范围枚举为:

enum class DType { Int, Char };

,其中的Int可以这样访问:

DType::Int

答案 1 :(得分:2)

从历史上看,这就是枚举的工作方式。

用“枚举类”代替“枚举”,可以提高安全性和所需的访问语法。

相关问题