Enum-Variablen in Strings konvertieren
Beim Arbeiten mit Enum-Variablen kann es erforderlich sein, die entsprechenden String-Darstellungen anstelle von Ganzzahlwerten zu drucken . Um diese Konvertierung zu erreichen, stehen mehrere Ansätze zur Verfügung.
Naive Lösung
Ein einfacher Ansatz besteht darin, eine Funktion zu erstellen, die jeden einzelnen Enum-Wert in einen String umwandelt:
enum OS_type { Linux, Apple, Windows }; inline const char* ToString(OS_type v) { switch (v) { case Linux: return "Linux"; case Apple: return "Apple"; case Windows: return "Windows"; default: return "[Unknown OS_type]"; } }
Obwohl diese Methode unkompliziert ist, wird sie bei der Verarbeitung einer großen Anzahl von Enumerationen unpraktisch Werte.
Boost.Preprocessor-Lösung
Um den Konvertierungsprozess zu automatisieren, kann die Boost.Preprocessor-Bibliothek eingesetzt werden. Mit dieser Lösung können Sie eine Enumeration mit String-Konvertierungen auf einmal definieren:
#include <boost/preprocessor.hpp> #define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators) \ enum name { \ BOOST_PP_SEQ_ENUM(enumerators) \ }; \ \ inline const char* ToString(name v) \ { \ switch (v) \ { \ BOOST_PP_SEQ_FOR_EACH( \ X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE, \ name, \ enumerators \ ) \ default: return "[Unknown " BOOST_PP_STRINGIZE(name) "]"; \ } \ }
Mit diesem Makro kann die OS_type-Enumeration wie folgt definiert werden:
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
Dieser Ansatz löst die Wartung Probleme im Zusammenhang mit der naiven Lösung und generiert dynamisch die erforderlichen Konvertierungsfunktionen.
Sonstiges Überlegungen
In C ist es möglich, ToString als Operatorüberladung zu implementieren, was die Verwendung prägnanter macht. Darüber hinaus kann diese Lösung auch für die Verwendung in C angepasst werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Enum-Variablen effizient in ihre String-Darstellungen in C konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!