怀疑解析枚举中的命名空间
doubt resolving namespaces in enums?
从下面的问题中,我得到了枚举和命名空间范围的工作原理
枚举上的作用域解析运算符是特定于编译器的扩展?
但是,关于下面的测试代码,我对下面的代码片段中的原因感到困惑:
1)我可以将函数签名中的返回类型称为test_enum::foo_enum
2)但是不允许"使用命名空间test_enum::foo_enum"
namespace test_enum {
enum foo_enum {
INVALID,
VALID
};
}
// Case 1) this is allowed
test_enum::foo_enum getvalue() {
return test_enum::INVALID;
}
//Case 2) is not allowed
using namespace test_enum::foo_enum;
不允许案例 2 是否有特殊原因?
此外,"枚举"是否更像是 C 风格的构造,并且在C++代码中最好避免?
不允许using namespace test_enum::foo_enum;
的原因是因为foo_enum
不是命名空间,而是枚举。有效的方法是using test_enum::foo_enum;
我相信你想做的是这样的:
namespace foo_enum {
enum foo_enum_t {
INVALID,
VALID,
};
}
using foo_enum::foo_enum_t;
这使您可以自由地扔foo_enum_t
,但您仍然必须输入foo_enum::INVALID
或foo_enum::VALID
相关文章:
- 如何公开库的枚举,以便我的代码不必键入整个命名空间来使用该枚举?
- 如何理解c++中在命名空间内部定义的枚举类型enum
- C++-使用来自不同头文件、相同命名空间的枚举
- 访问向量字段的键 - 枚举类还是命名空间中的枚举?
- 枚举类不是类或命名空间
- 在命名空间中使用枚举
- 枚举、类、命名空间和长名称
- C++11 枚举类命名空间块
- 类名和枚举值之间的冲突:无需命名空间即可解析
- 命名空间中的doxygen枚举
- 在不膨胀命名空间的情况下在C++中声明枚举的好方法
- 将C++命名空间枚举包装到C接口
- 在类中映射命名空间枚举
- 空的、未命名的枚举说明符的合法性
- 不是创建模板类后的类、命名空间或枚举
- 不同文件中同一命名空间中的 2 个不同枚举中的相同标识符
- 或命名空间中的枚举
- is_error_code_enum<>枚举必须仅在全局命名空间中定义?
- C++ 定义不同命名空间的枚举
- ' static constexpr auto '数据成员初始化为未命名的枚举