Das Konvertieren von Enum-Typ-Variablen in Strings ist eine häufige Anforderung in der Programmierung. Dies ist beispielsweise erforderlich, wenn Aufzählungswerte in einem lesbaren Format ausgegeben werden oder wenn sie als Parameter an Funktionen übergeben werden, die Zeichenfolgenargumente erwarten.
Ein einfacher Ansatz für Aufzählungen Bei der Typkonvertierung wird für jede Aufzählung eine manuelle Funktion geschrieben. Um beispielsweise eine OS_type-Aufzählung zu konvertieren:
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]"; } }
Dieser Ansatz ist jedoch anfällig für Wartungsprobleme, da die Anzahl der Aufzählungen zunimmt.
Boost.Preprocessor-Bibliothek bietet eine elegantere und automatisiertere Möglichkeit, Enum-Typkonvertierungen durchzuführen. Es nutzt den Präprozessor, um Konvertierungsfunktionen dynamisch zu generieren. Die folgenden zwei Makros erreichen dies:
#define X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE(r, data, elem) \ case elem : return BOOST_PP_STRINGIZE(elem); #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 diesen Makros kann die OS_type-Enumeration wie folgt definiert werden:
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
In C kann die ToString-Funktion verwendet werden, um Enum-Werte in Strings umzuwandeln:
#include <iostream> int main() { OS_type t = Windows; std::cout << ToString(t) << " " << ToString(Apple) << std::endl; }
Für C kann die ToString-Funktion als Makro anstelle einer Funktionsüberladung implementiert werden:
#define ToString(t) \ [Unknown ""##t] [Linux "Linux"] [Apple "Apple"] [Windows "Windows"]
In diesem Artikel wurden zwei Methoden zum Konvertieren von Variablen vom Typ Enum in Strings vorgestellt: der naive Ansatz mit manuellen Funktionen und einer präprozessorbasierten Lösung mit Boost.Preprocessor. Der präprozessorbasierte Ansatz ist robuster und einfacher zu warten, insbesondere beim Umgang mit einer großen Anzahl von Aufzählungen.
Das obige ist der detaillierte Inhalt vonWie konvertiert man Enum-Typen effizient in Strings in C und C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!