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
Patricia ArquetteOriginal
2024-12-15 21:05:32973Durchsuche

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
};

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&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;
}

Die Begleitdatei „colours.def“ enthält:

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!

Stellungnahme:
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