インスタンスを作成せずにstd :: array <T、N>の要素数を取得する方法は?


9

はありますがstd::array<T, N>::size()、静的ではないため、のインスタンスが必要ですstd::array。配列のインスタンスを作成せずに、それが返す値(Nstd::array<T, N>)を取得する方法はありますか?通常の配列では、を使用することもできましたがsizeofsizeof(std::array<T, N>) == N * sizeof(T)本当であるという保証はありません。


を持っている場合Narrayそれを再現するように依頼する必要があるのはなぜですか?
ShadowRanger

@ShadowRangerなぜなら、本当であるsizeof(std::array<T, N>) == N * sizeof(T)必要はないからです。
NathanOliver

なぜなら、配列は他の場所でtypedefされるか、テンプレートへの引数として渡されるからです。
dragonroot

1
要素の数を知りたい場合は、を使用してくださいN
JohnFilleau

1
@dragonrootしかし、これらすべての意味は何ですか?すでにN開始する必要がある場合は、N間接的に取得したり、検証したりするために、これらすべてを実行する必要はありませんN==N。あなたが解決しようとしている実際のユースケースは何ですか?
レミールボー

回答:


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配列declがテンプレート引数としてテンプレート関数に渡されたとO / Pが考えていると思いますか?それでも、私が見ることができる唯一の目的は、それを返されたオブジェクトとして割り当てることです。それでもインスタンスを作成する必要があります。
Gem Taylor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.