[英]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.