Heim > Backend-Entwicklung > C++ > Wie rufe ich Enum-Werte als Text in C ab?

Wie rufe ich Enum-Werte als Text in C ab?

DDD
Freigeben: 2024-11-30 07:56:12
Original
995 Leute haben es durchsucht

How to Retrieve Enum Values as Text in C  ?

Aufzählungswerte als Text in C abrufen

In C besteht das Standardverhalten beim Drucken von Aufzählungen darin, ihre numerischen Werte auszugeben. Es gibt jedoch Situationen, in denen es wünschenswert ist, die Textdarstellung eines Enum-Werts abzurufen.

Lösungen ohne if/switch:

Verwendung einer Karte:

#include <map>
#include <string_view>

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

std::ostream& operator<<(std::ostream& out, const Errors value) {
    static const auto strings = []() {
        std::map<Errors, std::string_view> result;
#define INSERT_ELEMENT(p) result.emplace(p, #p);
        INSERT_ELEMENT(ErrorA);
        INSERT_ELEMENT(ErrorB);
        INSERT_ELEMENT(ErrorC);
#undef INSERT_ELEMENT
        return result;
    }();

    return out << strings[value];
}
Nach dem Login kopieren

Verwenden eines Arrays mit Linear Suche:

#include <string_view>

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

std::ostream& operator<<(std::ostream& out, const Errors value) {
#define MAPENTRY(p) {p, #p}
    const struct MapEntry {
        Errors value;
        std::string_view str;
    } entries[] = {
        MAPENTRY(ErrorA),
        MAPENTRY(ErrorB),
        MAPENTRY(ErrorC),
        {ErrorA, 0} // Placeholder for default case
    };
#undef MAPENTRY

    const char* s = 0;
    for (const MapEntry* i = entries; i->str; i++) {
        if (i->value == value) {
            s = i->str;
            break;
        }
    }

    return out << s;
}
Nach dem Login kopieren

Verwenden einer Switch/Case-Anweisung:

#include <string>

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

std::ostream& operator<<(std::ostream& out, const Errors value) {
    return out << [value]() {
#define PROCESS_VAL(p) case(p): return #p;
        switch (value) {
        PROCESS_VAL(ErrorA);
        PROCESS_VAL(ErrorB);
        PROCESS_VAL(ErrorC);
        }
#undef PROCESS_VAL
    }();
}
Nach dem Login kopieren

Testfall:

#include <iostream>

int main() {
    std::cout << ErrorA << std::endl << ErrorB << std::endl << ErrorC;
    return 0;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich Enum-Werte als Text in C ab?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage