如何在不创建实例的情况下获取std :: array <T,N>中的元素数量?


9

std::array<T, N>::size(),但它是非静态的,因此它需要一个实例std::array。有没有办法得到它返回值(是Nstd::array<T, N>,而不需要构建阵列的一个实例)?对于普通数组,我本可以使用sizeof,但是我看不到任何保证sizeof(std::array<T, N>) == N * sizeof(T)


如果有N,为什么需要要求array为您重制它?
ShadowRanger

@ShadowRanger因为sizeof(std::array<T, N>) == N * sizeof(T)不一定要如此。
NathanOliver

因为数组可以在其他地方进行类型定义,也可以作为参数传递给模板。
Dragonroot

1
如果您想知道元素的数量,请使用N
JohnFilleau

1
@dragonroot这是什么意思呢?如果您已经N开始使用,则无需遍历所有内容以N间接获取或验证N==N。您要解决的实际用例是什么?
雷米·勒博

Answers:


14

std::tuple_size<std::array>

static_assert(std::tuple_size<std::array<int, 5>>::value == 5);

普通的std :: size()不会吗?
Jesper Juhl

2
@JesperJuhl实际上,不需要,std::size()需要数组的实例。
0x499602D2

1
tuple_size但是,如果您已经预先知道将数组大小传递到模板中的话,那么使用这种方法就没有意义了。也许这将是一个更有意义的例子?using ArrayType = std::array<int, 5>; ... static_assert(std::tuple_size<ArrayType>::value == 5);
雷米·勒博

@RemyLebeau我猜O / P正在考虑将数组decl作为模板参数传递给模板函数吗?即使如此,我唯一看到的目的就是将其分配为返回的对象,这仍然需要创建一个实例。
宝石泰勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.