访问结构中定义的枚举值

Don*_*alo 7 c++ enums qt struct resolution

如果我有以下内容:

struct LineChartScene::LineChartSceneImpl
{
    enum ContextMenuAction {ShowLabels, ShowPoints, SaveAsImage};
};
Run Code Online (Sandbox Code Playgroud)

如何访问ShowLabels,ShowPoints等外面LineChartScene::LineChartSceneImpl结构?我认为LineChartScene::LineChartSceneImpl::ContextMenuAction::ShowLabels会工作,但事实并非如此.我正在使用C++,Qt Creator 2.2.1.

seh*_*ehe 9

struct LineChartScene::LineChartSceneImpl
{
    enum ContextMenuAction {ShowLabels, ShowPoints, SaveAsImage};
};
Run Code Online (Sandbox Code Playgroud)

用它作为

LineChartScene::LineChartSceneImpl::ShowLabels
Run Code Online (Sandbox Code Playgroud)

对于您的信息,C++ 11还具有强类型枚举,其中包含您期望的命名空间语义:

enum class Enum2 : unsigned int {Val1, Val2};
Run Code Online (Sandbox Code Playgroud)

枚举的范围也定义为枚举名称的范围.使用枚举器名称需要明确确定范围.Val1未定义,但Enum2::Val1已定义.

此外,C++ 11将允许旧式枚举提供显式作用域以及基础类型的定义:

enum Enum3 : unsigned long {Val1 = 1, Val2};
Run Code Online (Sandbox Code Playgroud)

枚举器名称在枚举的范围(Enum3::Val1)中定义,但为了向后兼容,枚举器名称也放在封闭范围内.


Naw*_*waz 5

使用 :

LineChartScene::LineChartSceneImpl::ShowLabels
Run Code Online (Sandbox Code Playgroud)

请注意,ContextMenuAction该行中没有任何内容。这是因为枚举标签没有在枚举类型范围内,而是在定义枚举的包围范围内,并且在这种情况下,包围范围是类类型。我知道这是非常不直观的,但这就是它的设计方式。