我還沒有在C++ 11標準中找到任何說無用的枚舉被廢棄的措辭,但從實用的角度來看,我想知道它們是否仍然有用。我的團隊有很多人已經得到了在轉換未範圍枚舉到作用域枚舉的習慣,但它引起了一些頭痛:非範圍枚舉仍然有用嗎?
class foo
{
public:
enum MyEnum { One, Two, Three };
};
他們將它轉換爲:
class foo
{
public:
enum class MyEnum { One, Two, Three };
};
這意味着這些普查員時被使用,而不是foo::One
,它看起來像foo::MyEnum::One
。我一直在問以下最佳實踐:
- 如果您轉換爲範圍的枚舉,將其移出的類和成全局範圍或命名空間範圍(以提高可用性,並避免上述後者使用示例)。
- 如果你保持enum unscoped,確保它在namespace/class/function/etc範圍內,這樣它就不會與其他名稱發生衝突。
兩點之間的主要區別在於#1我們不把它們放在類中,否則會增加一些冗長的間接性。
所有這些看起來都像是過於複雜化,並且似乎將枚舉已經存在於類中作爲unscoped枚舉要簡單得多。決定兩者之間的一般最佳實踐方法是什麼?
切換到'enum class'的好處是您可以閱讀關於爲何添加它的所有內容;切換到'enum class'的缺點就是你上面寫的所有東西。但是,這並不能告訴我們從頭開始編寫代碼時要做什麼。 – 2014-12-05 16:40:24
第二次使用有什麼問題? – Daniel 2014-12-05 16:40:48
@Daniel冗長。這就像使用2個嵌套命名空間來處理對象,只有1個就足夠了。 – 2014-12-05 16:41:27