Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencetak Nilai C Enum sebagai Teks Tanpa Menggunakan Pernyataan if/switch?

Bagaimana untuk Mencetak Nilai C Enum sebagai Teks Tanpa Menggunakan Pernyataan if/switch?

Patricia Arquette
Patricia Arquetteasal
2024-11-29 22:55:12677semak imbas

How to Print C   Enum Values as Text Without Using if/switch Statements?

Mencetak Nilai Enum sebagai Teks dalam C Tanpa 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!

Kenyataan:
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