优雅地声明2(甚至多维)维std :: arrays

Jab*_*cky 13 c++ stdarray

我正在使用基于的二维数组std::array

基本上代替:

MyType myarray[X_SIZE][Y_SIZE];
Run Code Online (Sandbox Code Playgroud)

我有:

std::array<std::array<MyType, Y_SIZE>, X_SIZE> myarray;
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但是IMO的声明不是很可读。

有没有一种方法可以使用一些聪明的C ++模板机制来声明,所以声明可能看起来像这样?

My2DArray<Mytype, X_SIZE, Y_SIZE> myarray;
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 21

如果只需要2D数组,则非常简单:

template <class T, std::size_t X, std::size_t Y>
using My2DArray = std::array<std::array<T, Y>, X>;
Run Code Online (Sandbox Code Playgroud)

如果您希望通用机制不限于2D数组,也可以这样做:

template <class T, std::size_t N, std::size_t... Ns>
struct AddArray {
    using type = std::array<typename AddArray<T, Ns...>::type, N>;
};

template <class T, std::size_t N>
struct AddArray<T, N> {
    using type = std::array<T, N>;
};

template <class T, std::size_t... N>
using MyNDArray = typename AddArray<T, N...>::type;
Run Code Online (Sandbox Code Playgroud)

[现场示例]