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
Mary-Kate OlsenOriginal
2024-11-30 08:28:11927Durchsuche

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"

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

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

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

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!

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