Heim > Backend-Entwicklung > C++ > Wie kann ich die Textdarstellung eines C-Enum-Werts drucken?

Wie kann ich die Textdarstellung eines C-Enum-Werts drucken?

Mary-Kate Olsen
Freigeben: 2024-11-30 08:28:11
Original
925 Leute haben es durchsucht

How Can I Print the Textual Representation of a C   Enum Value?

C: Enum-Wert als Text drucken

Enum-Typen bieten eine praktische Möglichkeit, eine Reihe von Konstanten mit symbolischen Namen darzustellen. Standardmäßig werden Aufzählungen als Ganzzahlwerte dargestellt. In Situationen, in denen Sie jedoch den tatsächlichen Text anzeigen müssen, der einem Aufzählungswert zugeordnet ist, ist das Standardverhalten möglicherweise nicht geeignet.

Betrachten wir ein Beispiel:

enum Errors {
    ErrorA = 0,
    ErrorB,
    ErrorC,
};

Errors anError = ErrorA;
std::cout << anError; // Outputs "0"
Nach dem Login kopieren

In diesem Beispiel Wir haben eine Errors-Enumeration mit drei möglichen Werten: ErrorA, ErrorB und ErrorC, wobei ErrorA den numerischen Wert 0 hat. Wenn wir versuchen, die Variable anError zu drucken, wird sie ausgegeben „0“ anstelle des gewünschten „ErrorA“.

Um dieses Problem zu lösen, ohne auf if/switch-Anweisungen zurückgreifen zu müssen, können mehrere Methoden eingesetzt werden:

1. Verwenden einer Karte:

#include <map>
#include <string_view>

// Define a map to associate enum values with their string representations
std::map<Errors, std::string_view> errorStrings = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the `<<` operator to print the string representation
std::ostream& operator<<(std::ostream& out, const Errors value) {
    out << errorStrings[value];
    return out;
}
Nach dem Login kopieren

Mit dieser Methode wird das überladene << Der Operator sucht nach der Zeichenfolgendarstellung, die einem Enumerationswert in der errorStrings-Zuordnung zugeordnet ist, und gibt sie aus.

2. Verwenden eines Arrays von Strukturen:

#include <string_view>

// Define a struct to store enum values and string representations
struct MapEntry {
    Errors value;
    std::string_view str;
};

// Define an array of structures
MapEntry entries[] = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the `<<` operator to perform a linear search and print the string representation
std::ostream& operator<<(std::ostream& out, const Errors value) {
    for (const MapEntry& entry : entries) {
        if (entry.value == value) {
            out << entry.str;
            break;
        }
    }
    return out;
}
Nach dem Login kopieren

Diese Methode verwendet ein Array von Strukturen, um die Enum-Werte und ihre Zeichenfolgendarstellungen zu speichern. Es wird eine lineare Suche durchgeführt, um die passende Zeichenfolge für den angegebenen Enum-Wert zu finden.

3. Verwendung von Schalter/Fall:

#include <string>

// Overload the `<<` operator to print the string representation using `switch/case`
std::ostream& operator<<(std::ostream& out, const Errors value) {
    switch (value) {
        case ErrorA: out << "ErrorA"; break;
        case ErrorB: out << "ErrorB"; break;
        case ErrorC: out << "ErrorC"; break;
    }
    return out;
}
Nach dem Login kopieren

Bei dieser Methode wird das überladene << Der Operator verwendet eine Switch/Case-Anweisung, um die entsprechende Zeichenfolgendarstellung für den angegebenen Enumerationswert direkt auszugeben.

Das obige ist der detaillierte Inhalt vonWie kann ich die Textdarstellung eines C-Enum-Werts drucken?. 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