Шаблонный класс - массив, хочу сделать специализацию в которой он создает массив экземпляров массивов

Пытаюсь написать класс массивов, и для того чтобы создавать двумерный массив написал специализацию шаблона класса в которой он создает массив экземпляров класса самого себя, которые в свою очередь создают массивы переменных Т. Сейчас специализация шаблонов не работает и не создает массив экземпляров класса, как это исправить?

#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");
}

Ответы (0 шт):