我在「Foo」類(下面)中定義了一組枚舉值。在C++ 98和C++中訪問枚舉值11
namespace Fii
{
class Foo
{
struct Bar
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
};
我正在使用一個結構來減少Baz枚舉值的範圍以及顯示有一組相關的值。
我的目標是將枚舉類型的值賦給變量。使用上面的類定義,可以這樣做:
Fii::Foo::Bar::Baz myValue = Fii::Foo::Bar::BAZ1 (Works in both C++98 and C++11)
不過,我覺得:
- 乍一看,myvalue的似乎被初始化爲FII ::富::酒吧但是這僅僅是因爲枚舉是一個黑客將相關的常量在父(酒吧在這種情況下)
要提高戰備,二重因素代碼:
namespace Fii
{
class Foo
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
使用這個新的類定義,可以這樣做:
Fii::Foo::Baz myValue = Fii::Foo::Baz::BAZ1 (Works in C++11 only)
Fii::Foo::Baz myValue = Fii::Foo::BAZ1 (Should work on C++98 and C++11 - not tested)
Q1)爲什麼FII ::富::酒吧: :Baz myValue = Fii :: Foo :: Baz :: BAZ1只適用於C++ 11?
Q2)在C++ 98,有寫FII ::富::巴茲myvalue的= FII ::富::巴茲:: BAZ1的方法嗎?您可以在班級定義中進行任何您想要的更改。
環境: - 鏘編譯器C++ 11支持 - Xcode的4 - 的Mac OS操作系統10.8
你能解釋爲什麼這段代碼是必需的嗎? Baz(E e):e_(e){} operator const E()const {return e_; } private: E e_; –
@DavidAndreoletti:在上面的代碼中,Baz是一個「用戶定義的類型」 - 一個對象實例每個都管理一個「E」值的類。您要求的代碼是存儲其中一個枚舉的構造方法,只要對象出現在編譯器不知道如何處理「Baz」的表達式中時隱式提供「E」值的運算符,以及成員變量存儲'E'。明白了嗎? - 隨時要求進一步澄清/例子.... –
我試過你的建議,它工作得很好。你認爲這有助於代碼的可讀性並且不會妨礙代碼的可維護性嗎? –