N 维矩阵 class 使用向量的向量

N-dimensional matrix class using vectors of vectors

我正在尝试实现自定义 class,它使用向量的向量处理 n 维矩阵,概括 1d、2d 和 3d 定义:

using mat1dd = std::vector<double>;
using mat2dd = std::vector<mat1dd>;
using mat3dd = std::vector<mat2dd>;

这是我尝试实现这个 class。

template <std::size_t N_DIM, typename T>
class matnd {
    std::vector<matnd<N_DIM - 1, T>> mat;
    ...
}

我的意图是,例如,

matnd<3, double> mat;

创建一个 3 维双精度矩阵。

上面的递归定义显然失败了,因为它没有基本情况,所以 N_DIM 只是无限减少(直到编译器停止)。我怎样才能以不遇到此问题的方式实现此 class?

使用包含类型定义的模板结构将其专门用于 n = 1:

template<size_t n, typename T>
struct matnd_helper
{
    using type = std::vector<typename matnd_helper<n - 1, T>::type>;
};

template<typename T>
struct matnd_helper<1, T>
{
    using type = std::vector<T>;
};

template<size_t n, typename T>
using matnd = typename matnd_helper<n, T>::type;

using mat1dd = matnd<1, double>;
using mat2dd = matnd<2, double>;
using mat3dd = matnd<3, double>;