我正在使用范围枚举来枚举我正在实现的某些状态机中的状态。例如,让我们这样说:
enum class CatState
{
sleeping,
napping,
resting
};
在我定义状态转换表的 cpp 文件中,我想使用等同于 using namespace X
的东西,这样我就不需要在所有状态名称前加上前缀 猫状态::
。换句话说,我想使用 sleeping
而不是 CatState::sleeping
。我的转换表有很多列,因此避免使用 CatState::
前缀会使内容更加紧凑和可读。
那么,有没有办法避免一直输入 CatState::
?
是的,是的,我已经意识到使用命名空间
的缺陷。如果强类型枚举有等效项,我保证只在我的 cpp 实现文件中的有限范围内使用它,而不是作恶。
最佳答案
So, is there a way to avoid having to type
CatState::
all the time?
在 C++20 之前没有。正如没有为静态类成员键入 ClassName::
的等价物一样。你不能说 using typename ClassName
然后进入内部。强类型 enum
也是如此。
C++20 添加了 using enum X
语法,它看起来像什么。
您当然可以不使用enum class
语法,只使用常规的enum
。但是你会失去强类型。
应该注意的是,对弱类型枚举使用 ALL_CAPS 的原因之一是为了避免名称冲突。一旦我们有了完整的作用域和强类型,枚举的名称就被唯一标识并且不能与其他名称冲突。能够将这些名称带入 namespace 范围会重新引入此问题。因此,您可能希望再次使用 ALL_CAPS 来帮助消除名称歧义。
关于c++ - 作用域枚举的 "using namespace X"等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33827423/