Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1465 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Comment recuperez le nombre d'element d'un enum ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment recuperez le nombre d'element d'un enum ?

n°2281571
bqron
We become what we think about.
Posté le 17-05-2016 à 03:14:11  profilanswer
 

Bonjour,

Code :
  1. class Locator {
  2.   enum class services : int {
  3.     foo, bar, yolo
  4.   };
  5.   /* ... */
  6. };


 
En essayant ceci :

Code :
  1. std::array<std::unique_ptr<IService>, sizeof(Locator::services)> Services;


 
Le problème c'est que le sizeof me renvoi un size_t de 4 octets, ce qui correspond la taille d'un int, : int et non à mes 3 éléments.  
 
Le sizeof sur un objet n'est il pas sensé renvoyer la taille de l'objet en octet ? Un enum scoper n'est il pas un objet ?  
 
 
Autre problème que je n'arrive pas a trouver, dans ces déclarations :  
 

Code :
  1. int val1:2;
  2. bool val2:1;
  3. int val1:3;


 
Que signifie ces deux points ?


---------------
The success, is a progressive realization of a worthy ideal
mood
Publicité
Posté le 17-05-2016 à 03:14:11  profilanswer
 

n°2281572
Farian
Posté le 17-05-2016 à 07:47:52  profilanswer
 

Bonjour !
 
Pour les énumérés, sauf erreur de ma part ou ajout dans la nouvelle mouture, on ne peut pas.
 
Pour la deuxième notation, dans une structure, c'est ce qu'on appelle des champs de bits. Dans l'exemple ci-dessus, cela donne :  
val1 : entier signé sur 2 bits (entre -2 et 1)
val2 : booléen stocké sur un bit (ce qui suffit largement),
val1 : entier signé sur 3 bits (entre -4 et 3).
 
Ce n'est pas forcément conseillé de les utiliser par pas mal de règles de programmation, la façon dont les données sont stockées en mémoire dépend du bon vouloir du compilateur, mais cela permet de gagner de la place en mémoire.
 
Bonne continuation !


---------------
On n'est jamais très fort pour ce calcul !
n°2281589
gilou
Modérateur
Modzilla
Posté le 17-05-2016 à 12:10:16  profilanswer
 

Qand tu fais la déclaration enum class services : int {...}, tu dis que ton enum aura pour taille celle d'un int. Il est donc normal que sizeof te renvoie la taille d'un int.
Il n'y a pas de moyen standard sinon.
 
En boost, il y a une astuce basée sur le préprocesseur:
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/preprocessor/seq/size.hpp>
 
#define DEFINE_NEW_ENUM(Type_, Values_)\
  typedef enum { BOOST_PP_SEQ_ENUM(Values_) } Type_;\
  size_t count(Type_) { return BOOST_PP_SEQ_SIZE(Values_); }
 
Et donc quand tu définis ton enum avec DEFINE_NEW_ENUM, la macro définit aussi la fonction count avec pour paramètre un enum de ce type, qui renvoie le nb d'elts (BOOST_PP_SEQ_SIZE(Values_) ne fait que compter le nb d'elements de Values_).
 
A+,
 


---------------
Samantha Fish Rulez!     --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2281635
theshockwa​ve
I work at a firm named Koslow
Posté le 17-05-2016 à 18:27:38  profilanswer
 

Code :
  1. enum class Services
  2. {
  3.   foo,
  4.   bar,
  5.   baz,
  6.   Count
  7. };


 
de rien :o


---------------
last.fm
n°2281666
bqron
We become what we think about.
Posté le 18-05-2016 à 03:16:52  profilanswer
 

[:crevetteman:5]  
 
Toi tu mérites ton titre d’ingénieur  :jap:  
 
Et merci également aux autres.


---------------
The success, is a progressive realization of a worthy ideal

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Comment recuperez le nombre d'element d'un enum ?

 

Sujets relatifs
Sous total avec 2 filtre.[Prolog] : ajouter un nombre à la bonne place dans une liste de nb
Compter le nombre de valeurs différentesNombre de session simultanées
Colorier un élément de matriceCompter le nombre de lignes d'un fichier .
compter nombre de ligne entre deux motsTransformer une chaine en nombre complexe
[SQL] Select un nbre max de données = selectionner une ligne sur n.[EXCEL] Associé nombre à mot depuis une liste déroulante
Plus de sujets relatifs à : Comment recuperez le nombre d'element d'un enum ?



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR