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.
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还具有强类型枚举,其中包含您期望的命名空间语义:
Run Code Online (Sandbox Code Playgroud)enum class Enum2 : unsigned int {Val1, Val2};枚举的范围也定义为枚举名称的范围.使用枚举器名称需要明确确定范围.
Val1未定义,但Enum2::Val1已定义.此外,C++ 11将允许旧式枚举提供显式作用域以及基础类型的定义:
Run Code Online (Sandbox Code Playgroud)enum Enum3 : unsigned long {Val1 = 1, Val2};枚举器名称在枚举的范围(
Enum3::Val1)中定义,但为了向后兼容,枚举器名称也放在封闭范围内.
使用 :
LineChartScene::LineChartSceneImpl::ShowLabels
Run Code Online (Sandbox Code Playgroud)
请注意,ContextMenuAction该行中没有任何内容。这是因为枚举标签没有在枚举类型范围内,而是在定义枚举的包围范围内,并且在这种情况下,包围范围是类类型。我知道这是非常不直观的,但这就是它的设计方式。
| 归档时间: |
|
| 查看次数: |
19972 次 |
| 最近记录: |