gpt4 book ai didi

c++ - 等效于范围枚举的 "using namespace X"?

转载 作者:IT老高 更新时间:2023-10-28 12:43:31 24 4
gpt4 key购买 nike

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

enum class CatState
{
sleeping,
napping,
resting
};

在我定义状态转换表的 cpp 文件中,我想使用与 using namespace X 等效的东西,这样我就不需要在所有状态名称前加上 CatState::。换句话说,我想使用 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 然后进入内部。强类型 enums 也是如此。

C++20 添加了 using enum X 语法,它看起来像这样。

你当然可以不使用 enum class 语法,只使用常规的 enum。但是你会失去强类型。

应该注意,对弱类型枚举使用 ALL_CAPS 的原因之一是为了避免名称冲突。一旦我们有了完整的作用域和强类型,枚举的名称就是唯一标识的,并且不能与其他名称冲突。能够将这些名称带入命名空间范围将重新引入这个问题。因此,您可能希望再次使用 ALL_CAPS 来帮助消除名称的歧义。

关于c++ - 等效于范围枚举的 "using namespace X"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9450338/

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