gpt4 book ai didi

C++11 枚举类包含重复值

转载 作者:可可西里 更新时间:2023-11-01 18:37:40 26 4
gpt4 key购买 nike

经典的 C++ 枚举没有直接的方法来检测重复值。

新的 C++11 enum class 是否解决了这个问题?

enum class ConnectionState : uint32_t
{
Connecting,
Reconnecting = 2,
Disconnecting,
LocalConnection,
NoNetwork = 2,
WifiNetwork,
Last
}

最佳答案

目前没有办法检测或防止枚举中有多个相同的枚举值。

The reflection working group正在研究如何向语言添加反射——C++ 代码自省(introspection) C++ 代码的能力。在反射涵盖的一长串内容中,有一个正在处理的短列表,在该短列表中,在编译时检查枚举的值。

N4428包含枚举反射的建议。 There are some partial implementations在那里。

在 N4428 下,检测重复项很容易。您可以在编译时获取枚举值的数量及其值。只需按顺序创建一组所有枚举值,并测试它们是否唯一。然后将该测试的结果放入 static_assert

最终结果可能是:

template<class E>
constexpr bool all_values_unique(); // todo

static_assert( all_values_unique<ConnectionState>(), "Duplicate enum value detected" );

在将反射提议之类的东西添加到 C++ 之前,这是不可能的。

您可以使用宏来伪造它——有一个既可以创建您的枚举又可以创建关于它的反射特征信息的宏——然后编写使用反射特征信息的 all_values_unique。这样做的好处是,如果/当标准和/或您的编译器获得所需的反射功能时,可能很容易去除您的宏。

关于C++11 枚举类包含重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092484/

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