Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencetak Nilai C Enum sebagai Teks Tanpa Menggunakan Pernyataan if/switch?
Dalam C , enum menyediakan cara yang mudah untuk mewakili set pemalar bernama. Walau bagaimanapun, apabila mencetak nilai enum, tingkah laku lalai adalah untuk memaparkan perwakilan berangkanya.
Andaikan kita mempunyai enum seperti ini:
enum Errors { ErrorA = 0, ErrorB, ErrorC, };
Jika kita cuba mencetak nilai enum menggunakan std::cout:
Errors anError = ErrorA; std::cout <p>Kami akan mendapat nilai angka 0 dan bukannya perwakilan teks "ErrorA". Isu ini timbul kerana std::cout tidak mempunyai sokongan terbina dalam untuk menukar enum kepada rentetan.</p><h3>Penyelesaian</h3><p><strong>1. Menggunakan Peta</strong></p><p>Satu pendekatan ialah mencipta peta yang mengaitkan setiap nilai enum dengan perwakilan teksnya:</p><pre class="brush:php;toolbar:false">#include <map> #include <string_view> std::ostream& operator 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 <p><strong>2. Menggunakan Tatasusunan Struktur dengan Carian Linear</strong></p> <p>Pilihan lain ialah menggunakan tatasusunan struktur, setiap satu mengandungi nilai enum dan perwakilan teksnya, dan kemudian lakukan carian linear:</p> <pre class="brush:php;toolbar:false">#include <string_view> std::ostream& operatorstr; i++) { if (i->value == value) { s = i->str; break; } } return out <p><strong>3. Menggunakan suis/kes</strong></p> <p>Akhir sekali, kita juga boleh menggunakan pernyataan suis/kes:</p> <pre class="brush:php;toolbar:false">#include <string> std::ostream& operator<p><strong>Menguji Penyelesaian:</strong></p> <p> Untuk menguji penyelesaian ini, kita boleh mencipta boleh laku menggunakan kod berikut:</p> <pre class="brush:php;toolbar:false">#include <iostream> int main(int argc, char** argv) { std::cout <p>Menjalankan ini boleh laku hendaklah mengeluarkan perwakilan teks bagi nilai enum:</p> <pre class="brush:php;toolbar:false">ErrorA ErrorB ErrorC
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nilai C Enum sebagai Teks Tanpa Menggunakan Pernyataan if/switch?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!