50 votes

Obtenir la taille d'un 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 fichier bar si je n'ai pas d'instance de Foo ?

82voto

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 .
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 recherchée.

7voto

Willy Goat Points 605

Vous pourriez donner Foo a 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 possibilité de nommer bar_size à quelque chose de plus descriptif si Foo a toujours plusieurs tableaux de la même taille.

3voto

Michael Cook Points 84

Vous pouvez procéder de la même manière que pour les matrices traditionnelles :

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

0voto

Gilson PJ Points 1471

Utilisez :

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