Maison >développement back-end >C++ >Comment puis-je imprimer les valeurs C Enum sous forme de texte lisible par l'homme sans utiliser les instructions Switch/If ?
C : Impression de valeurs d'énumération au format texte
Dans le domaine de la programmation, les énumérations (énumérations) sont souvent utilisées pour attribuer des valeurs numériques à États ou catégories distincts. Cependant, lorsqu'il s'agit d'énumérations, il devient nécessaire de transmettre leurs valeurs dans un format textuel plus significatif pour une meilleure lisibilité et compréhension.
Le problème : traduire les valeurs d'énumération en texte
Considérons une énumération définie comme suit :
enum Errors { ErrorA = 0, ErrorB, ErrorC, };
Maintenant, essayons d'imprimer la valeur d'une énumération variable :
Errors anError = ErrorA; std::cout << anError; // Will print "0" instead of "ErrorA"
Le défi ici réside dans la conversion de la valeur numérique de l'énumération en sa représentation textuelle correspondante.
Solutions sans utiliser Switch/If
1. Utilisation d'une carte :
Une approche consiste à utiliser une carte pour établir une correspondance entre les valeurs d'énumération et leurs représentations textuelles :
#include <map> #include <string_view> // Create a map that associates enum values with string views std::map<Errors, std::string_view> errorTextMap = { {ErrorA, "ErrorA"}, {ErrorB, "ErrorB"}, {ErrorC, "ErrorC"}, }; // Overload the << operator to handle enum values std::ostream& operator<<(std::ostream& out, const Errors value) { return out << errorTextMap[value]; }
2. Utilisation d'un tableau de structures avec recherche linéaire :
Une solution alternative consiste à créer un tableau de structures :
#include <string_view> // Define a structure to store enum values and text representations struct MapEntry { Errors value; std::string_view str; }; // Create an array of structures containing the mapping const MapEntry errorTextEntries[] = { {ErrorA, "ErrorA"}, {ErrorB, "ErrorB"}, {ErrorC, "ErrorC"}, {ErrorA, 0} // Dummy entry to terminate the search }; // Overload the << operator to handle enum values std::ostream& operator<<(std::ostream& out, const Errors value) { const char* s = nullptr; for (const MapEntry* i = errorTextEntries; i->str; i++) { if (i->value == value) { s = i->str; break; } } return out << s; }
Tester les solutions :
Pour démontrer la fonctionnalité du proposé solutions :
#include <iostream> int main() { std::cout << ErrorA << std::endl; std::cout << ErrorB << std::endl; std::cout << ErrorC << std::endl; return 0; }
Sortie :
ErrorA ErrorB ErrorC
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!