Скажем, у нас есть enum
тип foo
, который мы хотим использовать для индексации массива arr
со стати c размера.
Если мы хотим использовать 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» (см. { ссылка }), но оба решения как-то сложны, и мы могли бы лучше отказаться и использовать простое std::array<T, int>
вместо ...
Однако гораздо удобнее читать arr[foo::a]
вместо arr[0]
, где нам всегда нужно помните, что означает индекс 0
в последнем.
Можем ли мы сделать лучше?