2014-09-11 118 views
0

假設我有一個C類,它具有一個屬性狀態,可以將值降低,變平或變大。而不是將狀態變量表示爲整數,我們可以使用枚舉來代替(其中基本上是整數)。例如,類內枚舉

class C{ 
public: 
    enum state {down = -1, flat = 0, up = 1}; 
    C(state s = flat) : st(s) {} 
private: 
    state st; 
}; 

之所以把枚舉類的公共部分內是如此,其他對象可以使用此枚舉名單。他們將不得不打電話

C::up 

檢索值。我的問題是:將枚舉聲明放在類定義內部還是外部(例如直接在上面)是「最佳實踐」? 如果枚舉表示只對該類具有含義的值/狀態,那麼將其放在類定義中會感覺很直觀。

謝謝。

回答

0

如果枚舉在語義上只在類的上下文中有意義,那麼將它放在裏面是完全自然的。如果它具有全球意義,它應該在課外。無論如何,枚舉的放置應該反映正在開發的系統的語義。

因此,我完全同意你最後的句子。

1

你很可能不想自由浮動枚舉 - 它們應該在類或名稱空間中。如果enum僅在該特定類中具有含義,那麼將其放在裏面可能是最佳做法 - 我相信SFML通過其事件具有此示例(sf :: Event具有sf :: Event :: EventType類型的成員,它可以取值如sf :: Event :: KeyPressed等)。

+0

我同意,至少將它放置在一個名稱空間內(實質上是我們通過將其放置在類定義中的公共部分內而完成的)的感覺最好。就像你說的,避免自由浮動枚舉。 – jensa 2014-09-11 11:23:52

0

如果您使用C++ 11,則可以使用強類型枚舉。這些都是形式:

enum class state 
// ^
{ 
    Down, Flat, Up 
}; 

您現在是將這些使用訪問:

state::Down 
state::Flat 
state::Up 

請注意,這需要你有資格/ using元素,這始終是很好的做法。但是,不是這些枚舉是類型安全所以不能任意使用整數(你可能不應該這樣做)。

+0

啊,那真的很好。 – jensa 2014-09-11 11:50:16