C: Aufzählungswerte im Textformat drucken
Im Bereich der Programmierung werden Aufzählungen (Enums) häufig verwendet, um numerische Werte zuzuweisen verschiedene Zustände oder Kategorien. Beim Umgang mit Aufzählungen wird es jedoch notwendig, ihre Werte in einem aussagekräftigeren Textformat zu übermitteln, um die Lesbarkeit und das Verständnis zu verbessern.
Das Problem: Aufzählungswerte in Text übersetzen
Betrachten Sie eine Enumeration, die wie folgt definiert ist:
enum Errors { ErrorA = 0, ErrorB, ErrorC, };
Nun versuchen wir, den Wert von an auszugeben Enum-Variable:
Errors anError = ErrorA; std::cout << anError; // Will print "0" instead of "ErrorA"
Die Herausforderung besteht hier darin, den numerischen Wert der Enum in die entsprechende Textdarstellung umzuwandeln.
Lösungen ohne Verwendung von Switch/If
1. Verwenden einer Karte:
Ein Ansatz besteht darin, eine Karte zu verwenden, um eine Entsprechung zwischen Enum-Werten und ihren Textdarstellungen herzustellen:
#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. Verwenden eines Arrays von Strukturen mit linearer Suche:
Eine alternative Lösung besteht darin, ein Array von Strukturen zu erstellen:
#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; }
Testen Sie die Lösungen:
Um die Funktionalität der vorgeschlagenen Lösungen zu demonstrieren:
#include <iostream> int main() { std::cout << ErrorA << std::endl; std::cout << ErrorB << std::endl; std::cout << ErrorC << std::endl; return 0; }
Ausgabe:
ErrorA ErrorB ErrorC
Das obige ist der detaillierte Inhalt vonWie kann ich C-Enum-Werte als für Menschen lesbaren Text drucken, ohne Switch/If-Anweisungen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!