如何解决重构为枚举到枚举类阴影命名空间
namespace E {
enum { a,b }
void foo();
}
我想重构为使用 enum class
:
enum class E : int { a,b }
namespace E {
void foo();
}
然而,这无法编译,因为现在不能使用 namespace E
,因为它与 enum
同名。
有没有解决的办法 ?
基本上我仍然希望调用代码按原样编译,它使用 E::foo()
或 E::a
解决方法
另一种方法是定义一个枚举类,然后将其值映射到相应的常量:
namespace E {
enum class MyEnum { a,b };
constexpr auto a = MyEnum::a;
constexpr auto b = MyEnum::b;
void foo() {}
}
这种方式将引入强类型检查,并且不必更改依赖代码。更多类型,但不需要 C++20,它可以使用 C++11。
,基本上我仍然希望调用代码按原样编译,即使用 E::foo() 或 E::a
不,你不能这样做,enum class
的优点之一是不会污染外部命名空间。另一个是没有隐式转换。
从 C++20 开始,可以使用 using enum E;
enum class E : int { foo,bar };
using enum E;
int main()
{
E x = foo; // Now works
E y = E::bar; // Still works
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。