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