Мы можем создать псевдоним многомерного массива следующим образом:
template<typename T, size_t size1, size_t size2>
using myArray = std::array<std::array<T, size2>, size1>;
Но это позволяет нам только заранее определенное количество измерений.Есть ли способ превратить это в шаблон с переменным числом, чтобы мы могли написать любой из них:
myArray<int, 2, 2, 2> arr3d;
myArray<int, 2, 2, 2, 2> arr4d;
Я пробовал несколько вещей, но не был полностью удовлетворен ни одним из них.
Это:
template<typename T, size_t size>
using myArray<T, size> = std::array<T, size>;
template<typename T, size_t size, size_t... more>
using myArray = std::array<myArray<T, more...>, size>;
даже не компилируется, поскольку специализации шаблонов явно не разрешены для шаблонов псевдонимов.
В настоящее время это мое лучшее решение, но удаляются все конструкторы std:: массив, который я хотел бы сохранить:
template<typename T, size_t size, size_t... more>
struct myArray : public std::array<myArray<T, more...>, size> {};
template<typename T, size_t size>
struct myArray<T, size> : public std::array<T, size>{};
И с этим решением мне всегда нужно было бы писать ".internal" перед каждым доступом к массиву:
template<typename T, size_t size, size_t... more>
struct myArr {
std::array<myArr<T, more...>, size> internal;
};
template<typename T, size_t size>
struct myArr<T, size> {
std::array<T, size> internal;
};
Так могКто-нибудь думает о решении, как второе, но где я могу оставить конструкторов?Я не могу.