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& operator<<(std::ostream& 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; }
Dalam fail colours.def, takrifkan enum seperti berikut:
X(Red) X(Green) X(Blue) X(Cyan) X(Yellow) X(Magenta)
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.
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!