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
Susan Sarandonasal
2024-12-17 18:51:16490semak imbas

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

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!

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