簡體   English   中英

從 class 訪問枚舉成員

[英]Accessing enum members from class

所以考慮這個結構:

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;

提前致謝。

DType是一個無范圍枚舉,在其封閉的 scope 中可見:

無范圍枚舉(強調我的) - C++11 之前的:

每個枚舉器都成為枚舉類型(即名稱)的命名常量,在封閉的 scope 中可見,並且可以在需要常量時使用。

您正在尋找Scoped Enumeration (自 C++11 起可用):

每個枚舉器成為枚舉類型(即名稱)的命名常量,包含在枚舉的 scope 中,可以使用 scope 解析運算符訪問 沒有從作用域枚舉器的值到整數類型的隱式轉換,盡管可以使用 static_cast 來獲取枚舉器的數值。

請參閱文檔: https://en.cppreference.com/w/cpp/language/enum

因此,作為 Scoped Enumeration 的DType將是:

enum class DType { Int, Char };

並且,它的Int可以像這樣訪問:

DType::Int

從歷史上看,這就是枚舉的工作方式。

編寫“枚舉類”而不是“枚舉”,您將獲得更高的安全性和所需的訪問語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM