gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:34:29 24 4
gpt4 key购买 nike

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

关于c++ - 优雅地声明 2(甚至多)维 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57758589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com