50 votes

Récupère la taille de std :: array sans instance

Étant donné cette structure:

 struct Foo {
  std::array<int, 8> bar;
};
 

Comment puis-je obtenir le nombre d'éléments du tableau bar si je n'ai pas d'instance de Foo ?

83voto

Jarod42 Points 15729

Vous pouvez utiliser std::tuple_size :

 std::tuple_size<decltype(Foo::bar)>::value
 

26voto

skypjack Points 5516

Malgré la bonne réponse de @ Jarod42, voici une autre solution possible basée sur decltype qui n'utilise pas tuple_size .
Voici un exemple de travail 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 déjà une fonction membre constexpr nommée size qui renvoie la valeur que vous recherchez.

7voto

Willy Goat Points 605

Vous pouvez donner à Foo un membre public static constexpr .

 struct Foo {
 static constexpr std::size_t bar_size = 8;
 std::array<int, bar_size> bar;
}
 

Maintenant vous connaissez la taille de la barre de Foo::bar_size et vous avez la possibilité supplémentaire de nommer bar_size en quelque chose de plus descriptif si Foo déjà plusieurs tableaux de la même taille .

3voto

Michael Cook Points 84

Vous pouvez le faire comme pour les tableaux hérités:

 sizeof(Foo::bar) / sizeof(Foo::bar[0])
 

0voto

Gilson PJ Points 1471

Utilisation:

 sizeof(Foo::bar) / sizeof(int)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X