簡體   English   中英

匿名枚舉類

[英]Anonymous enum classes

有可能編寫一個匿名枚舉類,然后比較它包含的內容嗎? 例如。

enum class { APPLE, BANANA } fruitType;
// ...
if (fruitType == fruitType::APPLE)
    // ...

不, fruitType是一個變量(盡管名稱中包含Type)。 您不能使用變量名來訪問有關其類型的內容。

使用enum class的想法是,除非使用類型名稱作為前綴,否則這些值在定義之外是不可見的。 如果類型沒有名稱,這將很難!

你不能這樣做:

enum class { APPLE, BANANA } fruitType;
if (fruitType == fruitType::APPLE)

但你可以這樣做:

enum class FT { APPLE, BANANA } fruitType;
if (fruitType == FT::APPLE)

......這可能同樣容易。


請注意,您可能想要初始化它:

enum class FT { APPLE, BANANA } fruitType = FT::BANANA;
if (fruitType == FT::APPLE)

不是這樣的。 fruitType::APPLE不正確,因為fruitType不是命名空間的名稱。 但是,如果您只是編寫fruitType == APPLE (沒有為APPLE添加前綴),那就沒關系了。

我說這沒有意義。 它打破了enum類的整個想法,它被引入來解決傳統枚舉的一些問題(將枚舉器導出到周圍的范圍,隱式轉換為int,不可能指定底層類型)。 如果聲明匿名枚舉類,則其枚舉數不可訪問,因為它們不能被限定。 所以它沒有任何意義。

你不能。

但我同意能夠做到這一點會很好。 有時枚舉已經是一個充分嵌套和有限范圍的一部分,進一步的限定將是純粹的矯枉過正,但你仍然希望禁止轉換為int。 所以你必須做出權衡:選擇這兩種功能,或兩種功能。

是的,這是可能的 但如果它是匿名的話,它將無法在任何范圍之外訪問。

編輯 :問題的第二部分是錯誤。 你不必提到fruitType:: 然而,即使在刪除后; 編譯失敗。 這描繪了它,它不可用。

所以我不確定你的第二個問題。 我早就問了類似的問題

暫無
暫無

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

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