Определение многомерного массива с использованием синтаксиса T[][][]
очень просто. Однако это создает тип необработанного массива, который не очень хорошо вписывается в современный С++. Вот почему мы имеем std::array
с С++ 11. Но синтаксис для определения многомерного массива с использованием std::array
довольно грязный. Например, чтобы определить трехмерный массив int
, вам нужно написать std::array<std::array<std::array<int, 5>, 5>, 5>
. Синтаксис вообще не масштабируется. Я прошу исправить эту проблему. Возможно, эта проблема не может быть исправлена с использованием существующей утилиты, предоставляемой С++. В этом случае я доволен специальным инструментом, разработанным для упрощения синтаксиса.
Нашел :
template <typename T, std::size_t n, std::size_t... ns>
struct multi_array {
using type = std::array<typename multi_array<T, ns...>::type, n>;
};
template <typename T, std::size_t n>
struct multi_array<T, n> {
using type = std::array<T, n>;
};
template <typename T, std::size_t... ns>
using multi_array_t = typename multi_array<T, ns...>::type;
Интересно, можно ли упростить реализацию.