C++自定義枚舉類


C++
枚舉類型中,枚舉的名稱全數暴露於一般範圍中,因此兩個不同的枚舉,不可以有相同的枚舉名。例如:

enum Side{ Right, Left };

enum Thing{ Wrong, Right };

在編譯時會產生編譯錯誤,不能一起使用。

 

C++11 引進了一種特別的"枚舉類",可以避免上述的問題。參見我的上一篇博客《C++11》。

但是在VC2012中尚不支持該特性。幸運的是,我們可以通過多寫幾行代碼曲線實現一個枚舉名稱可重名的枚舉類型。廢話少話,奉上代碼:

namespace _EnumRecordType

{

    enum E

    {

        recTypeIris,

        recTypeFace,

    };

}

typedef _EnumRecordType::E EnumRecordType;

 

使用時可以像下面這樣使用:

EnumRecordType type = EnumRecordType::recTypeIris;

 

這樣實現在VC2012下可以順利編譯,但在VC2010上則會產生C4482的警告:

warning C4482: nonstandardextension used: enum '_EnumRecordType::Enum' used in qualified name

可以在namespace聲明的前面加入如下代碼,以去掉警告:

#if defined(_MSC_VER)&& _MSC_VER < 1700

#pragma warning(disable: 4482)

#endif

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章