Heim >Backend-Entwicklung >C++ >Wie kann ich C-Enums einfach in Strings konvertieren und Typedefs und unbenannte Enums verarbeiten?
Problemlose Konvertierung von C-Enums in Strings
Angenommen, Sie stoßen in Ihrem C-Code auf benannte Enums:
enum MyEnum { FOO, BAR = 0x50 };
Und Sie suchen nach einem Skript, um jeweils einen Header mit einer Konvertierungsfunktion zu generieren enum:
char* enum_to_string(MyEnum t);
Mit einer einfachen Implementierung wie dieser:
char* enum_to_string(MyEnum t){ switch(t){ case FOO: return "FOO"; case BAR: return "BAR"; default: return "INVALID ENUM"; } }
Jedoch wird es bei typisierten Enumerationen und unbenannten C-Enumerationen schwierig. Schauen wir uns die besten Lösungen an:
X-Macros: The Champion
X-Macros erweisen sich als erste Wahl und bieten eine elegante Lösung:
#include <iostream> enum Colours { # define X(a) a, # include "colours.def" # undef X ColoursCount }; char const* const colours_str[] = { # define X(a) #a, # include "colours.def" # undef X 0 }; std::ostream& operator= ColoursCount || c <p>Die Begleitdatei „colours.def“ enthält:</p> <pre class="brush:php;toolbar:false">X(Red) X(Green) X(Blue) X(Cyan) X(Yellow) X(Magenta)
Customizing String Ausgabe
Für zusätzliche Flexibilität können Sie die String-Ausgabe optimieren:
#define X(a, b) a, #define X(a, b) b, X(Red, "red") X(Green, "green") // etc.
Das obige ist der detaillierte Inhalt vonWie kann ich C-Enums einfach in Strings konvertieren und Typedefs und unbenannte Enums verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!