使用
T[][][]
语法定义多维数组很容易。然而,这会创建一个原始的数组类型,不适合现代 C++。那么,自 C++11 以来我们有了 std::array
。但是,使用 std::array
定义多维数组的语法非常混乱。例如,要定义一个三维的 int
数组,您需要写 std::array<std::array<std::array<int, 5>, 5>, 5>
。该语法根本不可扩展。我正在寻求解决此问题的方法。也许,使用 C++ 提供的现有实用工具无法解决此问题。在这种情况下,我希望开发一种自定义工具来简化语法。
我自己找到了一个解决方案:
template <typename T, std::size_t n, std::size_t... ns>
struct multi_array {
using type = std::array<typename multi_array<T, ns...>::type, n>;
};
template <typename T, std::size_t n>
struct multi_array<T, n> {
using type = std::array<T, n>;
};
template <typename T, std::size_t... ns>
using multi_array_t = typename multi_array<T, ns...>::type;
想知道这个实现是否可以进一步简化。
c++11
. - ildjarnstd::array
中,内存布局不能保证与 C 风格的数组相同(至少在 C++11 中如此,我不确定在 C++14 中是否已解决此问题)。 - juanchopanzastd::array
不就是一个简单的原始数组包装器吗? - Lingxi