作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有一个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/
我是一名优秀的程序员,十分优秀!