怀疑解析枚举中的命名空间

doubt resolving namespaces in enums?

本文关键字:命名空间 枚举 怀疑      更新时间:2023-10-16

从下面的问题中,我得到了枚举和命名空间范围的工作原理

枚举上的作用域解析运算符是特定于编译器的扩展?

但是,关于下面的测试代码,

我对下面的代码片段中的原因感到困惑:

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::INVALIDfoo_enum::VALID