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
DDDOriginal
2024-11-30 07:56:12992Durchsuche

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

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

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

Testfall:

#include <iostream>

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

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!

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