Heim > Backend-Entwicklung > C++ > Wie kann ich C-Enums einfach in Strings konvertieren und Typedefs und unbenannte Enums verarbeiten?

Wie kann ich C-Enums einfach in Strings konvertieren und Typedefs und unbenannte Enums verarbeiten?

Patricia Arquette
Freigeben: 2024-12-15 21:05:32
Original
966 Leute haben es durchsucht

How Can I Easily Convert C   Enums to Strings, Handling Typedefs and Unnamed Enums?

Problemlose Konvertierung von C-Enums in Strings

Angenommen, Sie stoßen in Ihrem C-Code auf benannte Enums:

enum MyEnum {
      FOO,
      BAR = 0x50
};
Nach dem Login kopieren

Und Sie suchen nach einem Skript, um jeweils einen Header mit einer Konvertierungsfunktion zu generieren enum:

char* enum_to_string(MyEnum t);
Nach dem Login kopieren

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";
      }
 }
Nach dem Login kopieren

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&amp; operator<<(std::ostream&amp; os, enum Colours c)
{
    if (c >= ColoursCount || c < 0) return os << "???";
    return os << colours_str[c];
}

int main()
{
    std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;
}
Nach dem Login kopieren

Die Begleitdatei „colours.def“ enthält:

X(Red)
X(Green)
X(Blue)
X(Cyan)
X(Yellow)
X(Magenta)
Nach dem Login kopieren

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.
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage