Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menukar C Enum secara Automatik kepada Rentetan Tanpa Mengubah Suai Kod Sumber?

Bagaimana untuk Menukar C Enum secara Automatik kepada Rentetan Tanpa Mengubah Suai Kod Sumber?

Susan Sarandon
Lepaskan: 2024-12-17 18:51:16
asal
478 orang telah melayarinya

How to Automatically Convert C   Enums to Strings Without Modifying Source Code?

Cara Menukar C Enum kepada Rentetan

Apabila bekerja dengan C enum yang dinamakan, anda mungkin menghadapi senario di mana menukar nilai enum kepada yang sepadan perwakilan rentetan adalah perlu. Walaupun beberapa pendekatan wujud untuk penukaran ini, artikel ini menangani pertanyaan khusus mengenai penjanaan fungsi untuk menukar semua enum dalam projek kepada rentetan tanpa mengubah suai kod sumber.

X-Macros: Penyelesaian Komprehensif

Pendekatan yang disyorkan melibatkan penggunaan X-makro. Contoh pelaksanaan dibentangkan di bawah:

#include <iostream>

enum Colours {
#   define X(a) a,
#   include "colours.def"
#   undef X
    ColoursCount
};

char const* const colours_str[] = {
#   define X(a) #a,
#   include "colours.def"
#   undef X
    0
};

std::ostream&amp; operator<<(std::ostream&amp; os, enum Colours c)
{
    if (c >= ColoursCount || c < 0) return os << "???";
    return os << colours_str[c];
}

int main()
{
    std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;
}
Salin selepas log masuk

Dalam fail colours.def, takrifkan enum seperti berikut:

X(Red)
X(Green)
X(Blue)
X(Cyan)
X(Yellow)
X(Magenta)
Salin selepas log masuk

Kaedah ini menyediakan cara yang fleksibel untuk menjana fungsi penukaran untuk semua enum dalam projek anda tanpa membuat sebarang pengubahsuaian pada kod sumber anda.

String Boleh Disesuaikan Generasi

Sebagai alternatif, anda boleh memilih kaedah yang membenarkan penyesuaian perwakilan rentetan yang dijana. Coretan kod berikut menggambarkan cara untuk mencapai ini:

#define X(a, b) a,
#define X(a, b) b,

X(Red, "red")
X(Green, "green")
// etc.
Salin selepas log masuk

Pendekatan ini memberikan kawalan yang lebih besar ke atas rentetan yang dijana dan boleh berguna terutamanya apabila anda memerlukan penyesuaian khusus untuk aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk Menukar C Enum secara Automatik kepada Rentetan Tanpa Mengubah Suai Kod Sumber?. 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