Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencetak Perwakilan Teks bagi Nilai C Enum?

Bagaimanakah Saya Boleh Mencetak Perwakilan Teks bagi Nilai C Enum?

Mary-Kate Olsen
Lepaskan: 2024-11-30 08:28:11
asal
923 orang telah melayarinya

How Can I Print the Textual Representation of a C   Enum Value?

C : Mencetak Nilai Enum sebagai Teks

Jenis Enum menyediakan cara yang mudah untuk mewakili set pemalar dengan nama simbolik. Secara lalai, enum diwakili sebagai nilai integer. Walau bagaimanapun, dalam situasi di mana anda perlu memaparkan teks sebenar yang dikaitkan dengan nilai enum, tingkah laku lalai mungkin tidak sesuai.

Mari kita pertimbangkan contoh:

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

Errors anError = ErrorA;
std::cout << anError; // Outputs "0"
Salin selepas log masuk

Dalam contoh ini, kami mempunyai enum Ralat dengan tiga nilai yang mungkin: ErrorA, ErrorB dan ErrorC, di mana ErrorA mempunyai nilai berangka 0. Apabila kami cuba mencetak anError variable, ia mengeluarkan "0" dan bukannya "ErrorA" yang dikehendaki.

Untuk menyelesaikan isu ini tanpa menggunakan pernyataan if/switch, beberapa kaedah boleh digunakan:

1 . Menggunakan Peta:

#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;
}
Salin selepas log masuk

Dengan kaedah ini, kelebihan beban << operator mencari perwakilan rentetan yang dikaitkan dengan nilai enum dalam peta errorStrings dan mengeluarkannya.

2. Menggunakan Tatasusunan Struktur:

#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;
}
Salin selepas log masuk

Kaedah ini menggunakan tatasusunan struktur untuk menyimpan nilai enum dan perwakilan rentetannya. Carian linear dilakukan untuk mencari rentetan padanan bagi nilai enum yang ditentukan.

3. Menggunakan suis/kes:

#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;
}
Salin selepas log masuk

Dalam kaedah ini, kelebihan beban << pengendali menggunakan pernyataan suis/kes untuk mencetak terus perwakilan rentetan yang sesuai untuk nilai enum yang diberikan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencetak Perwakilan Teks bagi Nilai C Enum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan