Heim >Backend-Entwicklung >C++ >Wie kann ich C-Enum-Werte als für Menschen lesbaren Text drucken, ohne Switch/If-Anweisungen zu verwenden?

Wie kann ich C-Enum-Werte als für Menschen lesbaren Text drucken, ohne Switch/If-Anweisungen zu verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 22:08:13997Durchsuche

How Can I Print C   Enum Values as Human-Readable Text Without Using Switch/If Statements?

C: Aufzählungswerte im Textformat drucken

Im Bereich der Programmierung werden Aufzählungen (Enums) häufig verwendet, um numerische Werte zuzuweisen verschiedene Zustände oder Kategorien. Beim Umgang mit Aufzählungen wird es jedoch notwendig, ihre Werte in einem aussagekräftigeren Textformat zu übermitteln, um die Lesbarkeit und das Verständnis zu verbessern.

Das Problem: Aufzählungswerte in Text übersetzen

Betrachten Sie eine Enumeration, die wie folgt definiert ist:

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

Nun versuchen wir, den Wert von an auszugeben Enum-Variable:

Errors anError = ErrorA;
std::cout << anError; // Will print "0" instead of "ErrorA"

Die Herausforderung besteht hier darin, den numerischen Wert der Enum in die entsprechende Textdarstellung umzuwandeln.

Lösungen ohne Verwendung von Switch/If

1. Verwenden einer Karte:

Ein Ansatz besteht darin, eine Karte zu verwenden, um eine Entsprechung zwischen Enum-Werten und ihren Textdarstellungen herzustellen:

#include <map>
#include <string_view>

// Create a map that associates enum values with string views
std::map<Errors, std::string_view> errorTextMap = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the << operator to handle enum values
std::ostream&amp; operator<<(std::ostream&amp; out, const Errors value) {
    return out << errorTextMap[value];
}

2. Verwenden eines Arrays von Strukturen mit linearer Suche:

Eine alternative Lösung besteht darin, ein Array von Strukturen zu erstellen:

#include <string_view>

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

// Create an array of structures containing the mapping
const MapEntry errorTextEntries[] = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
    {ErrorA, 0} // Dummy entry to terminate the search
};

// Overload the << operator to handle enum values
std::ostream&amp; operator<<(std::ostream&amp; out, const Errors value) {
    const char* s = nullptr;
    for (const MapEntry* i = errorTextEntries; i->str; i++) {
        if (i->value == value) {
            s = i->str;
            break;
        }
    }

    return out << s;
}

Testen Sie die Lösungen:

Um die Funktionalität der vorgeschlagenen Lösungen zu demonstrieren:

#include <iostream>

int main() {
    std::cout << ErrorA << std::endl;
    std::cout << ErrorB << std::endl;
    std::cout << ErrorC << std::endl;

    return 0;
}

Ausgabe:

ErrorA
ErrorB
ErrorC

Das obige ist der detaillierte Inhalt vonWie kann ich C-Enum-Werte als für Menschen lesbaren Text drucken, ohne Switch/If-Anweisungen zu verwenden?. 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