我使用基于 std::array
的二维数组。
基本上代替:
MyType myarray[X_SIZE][Y_SIZE];
我有:
std::array<std::array<MyType, Y_SIZE>, X_SIZE> myarray;
这工作得很好,但在我看来,声明的可读性不是很好。
有没有办法使用一些巧妙的 C++ 模板机制来声明这一点,因此声明可能看起来像这样?
My2DArray<Mytype, X_SIZE, Y_SIZE> myarray;
请您参考如下方法:
如果您只想要二维数组,那相当简单:
template <class T, std::size_t X, std::size_t Y>
using My2DArray = std::array<std::array<T, Y>, X>;
如果你想要一个不限于二维数组的通用机制,也可以做到:
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;