Heim >Backend-Entwicklung >C++ >Wie kann ich Enums in modernem C effizient in Strings konvertieren?

Wie kann ich Enums in modernem C effizient in Strings konvertieren?

DDD
DDDOriginal
2024-12-26 14:15:11478Durchsuche

How Can I Efficiently Convert Enums to Strings in Modern C  ?

Moderne C-Ansätze zum Konvertieren von Enums in Strings

Modernes C bietet innovative Techniken für die effiziente Konvertierung von Enums in Strings. Diese Methoden nutzen die Fähigkeiten des Compilers und machen manuelles Mapping oder Laufzeitaufwand überflüssig.

Magic Enum-Bibliothek

Die Magic Enum-Bibliothek, die nur auf den Header beschränkt ist, bietet statische Reflexion für Aufzählungen in C 17. Es ermöglicht eine einfache Konvertierung in und aus Strings sowie die Iteration über Enum Werte.

#include <magic_enum.hpp>

enum class Color { RED = 2, BLUE = 4, GREEN = 8 };

Color color = Color::RED;
std::string color_name = magic_enum::enum_name(color); // color_name -> "RED"

std::format-Bibliothek (C 20)

Die in C 20 eingeführte std::format-Bibliothek bietet einen standardisierteren Ansatz für die Zeichenfolgenformatierung . Es kann in Verbindung mit der Funktion enum_name verwendet werden, die einen std::string_view zurückgibt, der den Enum-Namen darstellt.

#include <format>
#include <magic_enum.hpp>

enum class Color { RED = 2, BLUE = 4, GREEN = 8 };

Color color = Color::RED;
std::string color_name = std::format("{}", magic_enum::enum_name(color)); // color_name -> "RED"

C 17 Fold Expressions and Variadic Templates

Für C 17 können Faltausdrücke und variadische Vorlagen kombiniert werden, um einen tabellengesteuerten Ansatz für die Konvertierung von Enum in String zu erstellen. Diese Technik ist etwas ausführlicher als die Magic Enum-Bibliothek, bietet aber mehr Kontrolle über den Konvertierungsprozess.

cppformat-Bibliothek

Die cppformat-Bibliothek bietet ein vorlagenbasiertes Makrosystem zur String-Formatierung. Es unterstützt die Konvertierung von Enumerationen in Zeichenfolgen durch spezielle Makros.

#include <cppformat/format.h>

enum class Color { RED = 2, BLUE = 4, GREEN = 8 };

Color color = Color::RED;
std::string color_name = FMT_STRING(color); // color_name -> "RED"

Die Auswahl des am besten geeigneten Ansatzes hängt von spezifischen Anforderungen ab, z. B. der Unterstützung negativer Werte oder fragmentierter Enumerationsbereiche. Für die allgemeine Enum-zu-String-Konvertierung in modernem C wird die Magic Enum-Bibliothek aufgrund ihrer Einfachheit und Effizienz empfohlen.

Das obige ist der detaillierte Inhalt vonWie kann ich Enums in modernem C effizient in Strings konvertieren?. 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