Comment recuperez le nombre d'element d'un enum ? - C++ - Programmation
Marsh Posté le 17-05-2016 à 07:47:52
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 !
Marsh Posté le 17-05-2016 à 12:10:16
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+,
Marsh Posté le 18-05-2016 à 03:16:52
Toi tu mérites ton titre d’ingénieur
Et merci également aux autres.
Marsh Posté le 17-05-2016 à 03:14:11
Bonjour,
En essayant ceci :
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 :
Que signifie ces deux points ?
---------------
The success, is a progressive realization of a worthy ideal