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
Freigeben: 2024-11-29 22:08:13
Original
915 Leute haben es durchsucht

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,
};
Nach dem Login kopieren

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

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

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];
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe:

ErrorA
ErrorB
ErrorC
Nach dem Login kopieren

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!

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