2016-08-01 58 views
2

在生成的類我有很多成員,有的用長的名字,像這樣的匿名枚舉:快捷方式在C嵌套類型++類

class ContainerClass { 
public: 
    enum { Enum1, EnumWithLongName2 ...}; 
}; 

這是好的表現,這些枚舉只屬於該類。然而,有時候我有一大堆這些枚舉(例如在單元測試的結果列表中),當我必須使用類的名稱來限定每個枚舉時,這些枚舉會變得非常大。有沒有辦法在這種情況下添加快捷方式,以便我可以省略類名?

我看着C++'s type alias,但這似乎沒有幫助。其他想法?

+0

我不認爲你可以導出所有你的匿名枚舉的值在類之外。也許你可以用枚舉名來生成這個類?你也可以在需要時將'ContainerClass'別名縮短到最短,這樣你就只需要'CC :: Enum1'而不是'ContainerClass :: Enum1'(不像Enum1那麼短)。 – Holt

+0

確實,混淆容器類會有所幫助。 –

+2

@霍爾特:缺乏名字並不是真正的問題; 'decltype(Enum1)'唯一標識類型。 – MSalters

回答

5

是的,有一個:derived class繼承枚舉名稱,可以使用它們沒有進一步限定。

因此,創建一個繼承自ContainerClass的助手類來定義列表。然而,輔助類不打算被實例化(你不想箱子另一個ContainerClass基子),因此定義列表爲static成員:

class enumList : public ContainerClass { 
     enumList() = delete; 
    public: 
     static decltype(Enum1) list[2] = { Enum1, EnumWithLongName2 }; 
}; 
+1

嘿,這很聰明 –