Шаблонный класс - массив, хочу сделать специализацию в которой он создает массив экземпляров массивов
Пытаюсь написать класс массивов, и для того чтобы создавать двумерный массив написал специализацию шаблона класса в которой он создает массив экземпляров класса самого себя, которые в свою очередь создают массивы переменных Т. Сейчас специализация шаблонов не работает и не создает массив экземпляров класса, как это исправить?
#include <iostream>
#include <chrono>
#include <cstdio>
using namespace std;
template <typename T>
class SuperArr
{
public:
SuperArr(int length);
~SuperArr();
void Print();
void Fill();
private:
int length;
T *arr;
};
template <typename T>
SuperArr<T>::SuperArr(int length)
{
this->length = length;
arr = new T [length];
}
template <typename T>
SuperArr<T>::~SuperArr()
{
delete[] arr;
}
template <typename T>
void SuperArr<T>::Print()
{
for (size_t i = 0; i < length; i++)
{
cout << arr[i] << "|";
}
cout << endl;
}
template <typename T>
void SuperArr<T>::Fill()
{
for (size_t i = 0; i < length; i++)
{
arr[i] = static_cast<T>(rand() % 10);
}
}
//=============================================================================================================================================================
template <typename T>
class SuperArr<SuperArr<T>>
{
public:
SuperArr(int length);
~SuperArr();
void Print();
void Fill();
private:
int length;
SuperArr* arr;
};
// Основная проблема
template <typename T>
SuperArr<SuperArr<T>>::SuperArr(int length)
{
this->length = length;
arr = new SuperArr<T>*[length];
}
template <typename T>
SuperArr<SuperArr<T>>::~SuperArr()
{
delete[] arr;
}
template <typename T>
void SuperArr<SuperArr<T>>::Fill()
{
for (size_t i = 0; i < length; i++)
{
arr[i].Fill();
}
}
template <typename T>
void SuperArr<SuperArr<T>>::Print()
{
for (size_t i = 0; i < length; i++)
{
arr[i].Print();
}
cout << endl;
}
int main(void)
{
auto start = chrono::high_resolution_clock::now();
srand(3);
system("chcp 1251>nul");
SuperArr<SuperArr<int>> f(10);
f.Fill();
f.Print();
cout << endl;
auto end = chrono::high_resolution_clock::now();
chrono::duration<float> duration = end - start;
cout << duration.count();
system("pause>nul");
}