Skip to main content
 首页 » 编程设计

c++之优雅地声明 2(甚至多)维 std::array

2024年02月20日18grandyang

我使用基于 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; 

[Live example]