gpt4 book ai didi

c++ - 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?

转载 作者:行者123 更新时间:2023-12-03 08:13:22 28 4
gpt4 key购买 nike

假设我们有一个enum类型foo我们想用它来索引数组 arr静态尺寸。

如果我们想使用enum class为此,我们可以这样尝试:

enum class foo
{
a,
b,
c,
count
};

std::array<T, static_cast<int>(foo::count)> arr;

但是,count字段是一个黑客。能否获取foo的字段个数以更优雅的方式?

无论如何,真正糟糕的是我们需要使用static_cast来访问数组。还有:arr[static_cast<int>(foo::a)] .

当然,我们可以编写一个自定义的“at”函数(请参阅 https://www.fluentcpp.com/2019/01/15/indexing-data-structures-with-c-scoped-enums/ )或提供一个“enum_array”类(请参阅 https://stackoverflow.com/a/55259936/547231 ),但这两种解决方案都有些复杂,我们最好放弃并使用简单的std::array<T, int>相反...

但是,读起来更直观 arr[foo::a]而不是arr[0] ,我们总是需要记住索引 0 的含义是什么。在后者中。

我们能做得更好吗?

最佳答案

不,不是真的。

有许多提案可以实现枚举值的静态反射。还没有使用 C++ 语言。

我的意思是你可以这样做:

namespace foo {
enum value {
a,b,c,count
};
}

那么到 int 的转换是隐式的,并且不会污染所包含的 namespace 。

solution here开销非常接近 0,并且允许您使用枚举(且仅枚举)作为 [] 的键。

所以你得到:

enum_array<foo, T> arr;

arr的行为就像你想要的那样。

关于c++ - 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59635501/

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