首页 > 解决方案 > 如何找到多维 std::array 的大小?

问题描述

我有一个多维std::array并寻找正确(方便和有效)的方法来找到它的大小(以单元格数或字节数)

size()只返回最后一个维度大小(这是可以理解的)

std::array<std::array<std::array<std::array<double, 2>, 3>, 6>, 100> my_array;

my_array.size();  // returns 100

尽管数组的大小在编译时是已知的,但我希望避免#define SIZE_OF_MY_ARRAY使用全局变量,因为我正在寻找一种比使用数组传递大小更好的方法(如在“旧”数组中,而不是 std 数组中),或者通知其他人使用定义的术语。

我也不想每次都计算它。

也许这两个偏好对于多维数组是不可能的?

我怎样才能有效地找到整体大小my_array?我正在使用

标签: c++c++11multidimensional-arraysizestdarray

解决方案


编写一个在编译时计算它的小实用程序并不难。

template<typename T> struct arr_sz {
    static constexpr std::size_t size = sizeof(T);
};

template<typename T, std::size_t N>
struct arr_sz<std::array<T, N>> {
    static constexpr std::size_t size = N * arr_sz<T>::size;
};

上面应该解开任何实际深度的嵌套数组定义,并评估用于存储T's 的字节大小,排除所有潜在的填充。

使用它的一个例子是

std::array<std::array<std::array<std::array<double, 2>, 3>, 6>, 100> my_array;
constexpr auto sz = arr_sz<decltype(my_array)>::size;
static_assert(sz == sizeof(double) * 2 * 3 * 6 * 100, ""); 

你可能会看到现场


推荐阅读