2009-12-03 74 views
4

以前我已經定義了在類的頭文件中專用的枚舉類型。封裝私有枚舉

private: 
    enum foo { a, b, c }; 

但是,我不希望暴露的枚舉的細節了。在類定義類不變量的過程中定義枚舉?

const int ClassA::bar = 3; 
enum ClassA::foo { a, b, c }; 

我想知道這是否正確的語法。

回答

9

C++沒有枚舉的前向聲明,所以你不能將enum「type」與enum「implementation」分開。

下面將C++ 0x中是可能的:

// foo.h 
class foo { 
    enum bar : int; // must specify base type 
    bar x; // can use the type itself, members still inaccessible 
}; 

// foo.cpp 
enum foo::bar : int { baz }; // specify members 
2

沒有,enum ClassA::foo { a, b, c };是不正確的語法。

如果您想將枚舉移出標頭並移入執行文件(.cpp),那麼就這樣做。如果你想使用枚舉類的參數類型的方法,那麼你不能移動它,所以把它保密。