感謝C++ 11,我們已經獲得了有限範圍和強類型的枚舉。
但是有沒有計劃讓這個可擴展呢?可擴展枚舉計劃
事情是這樣的:
enum class OneTwoThree : char {one=1, two=2, three=3};
enum class Four : char {four=4} extends OneTwoThree;
感謝C++ 11,我們已經獲得了有限範圍和強類型的枚舉。
但是有沒有計劃讓這個可擴展呢?可擴展枚舉計劃
事情是這樣的:
enum class OneTwoThree : char {one=1, two=2, three=3};
enum class Four : char {four=4} extends OneTwoThree;
它不會出現如此。
沒有紙張就沒有C++。方便的是,您可以在線查看所有在線文章here,並在official forums的研究小組中進行更多的非正式討論(「Future Proposals」小組可能是您對枚舉更改感興趣的人) 。
對於論文,徵文粗略搜索標題回至2011年揭示了以下主題:
這些論文都沒有涉及向現有枚舉中添加值的機制。類似地,在Future Proposals組中對「enum」的粗略搜索會產生大量的主題,其中沒有一個看起來像是從枚舉的初始定義以外的地方向枚舉中添加新值。
已經做了幾次嘗試來實現這種沒有庫或語言紊亂的功能; questions exploring the subject already exist on StackOverflow,可能對你有用。
謝謝你的廣泛答案。 – ttuna
據我所知,不是。 – Vitaliy
如果我沒有弄錯,'enum class'聲明只是說禁止枚舉值/整數/等之間的隱式轉換,它實際上並不會導致枚舉表示一個完整的類型,就像它在Java/Python /等等更不用說子類的語法已經被用來指示底層的數據類型,而'extends'不是C++關鍵字,iirc C++標準委員會不喜歡增加新的關鍵字。如果你真的需要C++中的子類化枚舉類型,你最好使用帶有可變參數,它會給你所有枚舉的編譯時間正派 – JAB
@JAB模板:_Complete type_在C++特定的含義,和* *每個**'enum'類型都是_complete type_。 'void'是一個不完整的類型的例子。 – MSalters