gpt4 book ai didi

c++ - 作用域枚举的 "using namespace X"等效项?

转载 作者:太空狗 更新时间:2023-10-29 23:13:48 25 4
gpt4 key购买 nike

我正在使用范围枚举来枚举我正在实现的某些状态机中的状态。例如,让我们这样说:

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/37133327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com