Compte tenu de cette structure:
struct Foo {
std::array<int, 8> bar;
};
Comment obtenir le nombre d'éléments du tableau bar
si je n'ai pas d'instance de Foo
?
Vous pouvez utiliser std::Tuple_size
:
std::Tuple_size<decltype(Foo::bar)>::value
Malgré bonne réponse de @ Jarod42, voici une autre solution possible basée sur decltype
qui n'utilise pas Tuple_size
.
Il suit un exemple minimal et fonctionnel qui fonctionne en C++ 11:
#include<array>
struct Foo {
std::array<int, 8> bar;
};
int main() {
constexpr std::size_t N = decltype(Foo::bar){}.size();
static_assert(N == 8, "!");
}
std::array
possède déjà une fonction membre constexpr nommée size
qui renvoie la valeur que vous recherchez.
Vous pouvez donner à Foo
un public static constexpr
membre.
struct Foo {
static constexpr std::size_t bar_size = 8;
std::array<int, bar_size> bar;
}
Vous connaissez maintenant la taille de la barre de Foo::bar_size
et vous avez la flexibilité supplémentaire de nommer bar_size
vers quelque chose de plus descriptif si Foo
a déjà plusieurs tableaux de la même taille.
Vous pouvez le faire de la même manière que pour les baies héritées:
sizeof(Foo::bar) / sizeof(Foo::bar[0])
Utilisation:
sizeof(Foo::bar) / sizeof(int)