bonjour!
je declare:mais je voudrais qu il m affiche "marie" et pas 0 ou 1!!Code:
1
2
3
4
5
6
7
8
9
10 #include<iostream> using namespace std; int main() { enum status{libre,marie}; status david=marie; cout<<david; return 0; }
comment faire?
Version imprimable
bonjour!
je declare:mais je voudrais qu il m affiche "marie" et pas 0 ou 1!!Code:
1
2
3
4
5
6
7
8
9
10 #include<iostream> using namespace std; int main() { enum status{libre,marie}; status david=marie; cout<<david; return 0; }
comment faire?
salut,
peut etre en redefinissant l'operateur << pour ton enum, mais je sais pas si c'est possible
sinon avec un truc du style
Code:
1
2
3
4
5
6
7
8
9 #include <iostream> int main(int argc, char** argv) { enum mon_enum{ e1, e2}; string enum_label[]={"label_e1","label_e2"}; std::cout << enum_label[e1] << std::endl; return 0 }
si l operator<< accepte le enum c est quil a deja une version qui recoit les enum!!
si j en fait un autre jpense que ca me fera une erreur!!
je pensai a un turc du genre
mais je suis pas sur que se soit possible.Code:
1
2
3 enum MonEnum{...}; //i on considere ce type; std::ostream operator<<(std::ostream& os, const MonEnum& data) // on pourai imaginer une surcharge de ce type
les valeur d'un enum sont des entiers, je pense que l'operateur<< agit en consequenceCitation:
si l operator<< accepte le enum c est quil a deja une version qui recoit les enum!!
je ne suis pas certain de ce que j'avance :roll:, je serait vraimet interressé de savoir si je dis des betise ou pas :oops:
Un enum est un type entier ! il n'est pas destiné à l'affichage.
il permet simplement au developpeur de ne pas manipuler des chiffres(1, 2,163,677) qui sont moins parlant.
Solution possible:
tu peux faire une fontionqui retourne la chaine de caractère ou description correspondant à l'énumerateur.Code:string getEnumTypeInfo(enum)
j ai essaye ca:
ca se compile sans erreur mais il faisait comme si mon operateur n existait pas!!!Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include<iostream> using namespace std; enum status; void operator<<(ostream& ,status ); int main() { enum status{libre,marie}; status david=marie; cout<<david; return 0; } void operator<<(ostream& out,status dupont) { out<<"bonjour"<<endl; }
je pense que puisque le compilo trouve deja un operateur
il ne regarde pas l operateurCode:
1
2 ostream::operator<<(status)
que pense tu??Code:
1
2 operator<<(ostream,status)
et si tu as raison que enum est un int!!!
a plus forte raison que je ne pourrai pas changer l operateur!!
Dans ce cas là tu peux "encapsuler" ton enum dans une class, tu y redéfinis l'opérateur, tu mets ton tableau de string si ca te fait plaisir aussi ^^
Et là, hop, il ne saura pas afficher sans ta redéfinition d'opérateur, et hop, t'as gagné.
Il y a des mécanismes qui gèrent les enumérations avec leur représentation textuelle. De mémoire, un truc très barbare à base de macros ; et vraiment pas sûr, un truc assez propre mais je ne me rappelle plus du tout où.
Un long passage dans la FAQ Comeau.
Sinon, je suis plutôt du genre à penser qu'utiliser un script (perl ou autre) qui analyse nos enums est ecore le mieux si la correspondance est immédiate -- et qu'il ne s'agit pas de remplacer TM par "Telemetry" et autres chaines avec des espaces.