Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menukar Pembolehubah Enum dengan Cekap kepada Perwakilan Rentetannya dalam C?

Bagaimanakah Saya Boleh Menukar Pembolehubah Enum dengan Cekap kepada Perwakilan Rentetannya dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-18 21:59:11
asal
441 orang telah melayarinya

How Can I Efficiently Convert Enum Variables to Their String Representations in C  ?

Menukar Pembolehubah Enum kepada Rentetan

Apabila bekerja dengan pembolehubah enum, mungkin terdapat keperluan untuk mencetak perwakilan rentetan yang sepadan dan bukannya nilai integer . Untuk mencapai penukaran ini, beberapa pendekatan tersedia.

Penyelesaian Naif

Satu pendekatan mudah ialah mencipta fungsi yang menukar setiap nilai enum individu kepada rentetan:

enum OS_type { Linux, Apple, Windows };

inline const char* ToString(OS_type v)
{
    switch (v)
    {
        case Linux:   return "Linux";
        case Apple:   return "Apple";
        case Windows: return "Windows";
        default:      return "[Unknown OS_type]";
    }
}
Salin selepas log masuk

Walaupun kaedah ini mudah, ia menjadi tidak praktikal apabila berurusan dengan sejumlah besar enum nilai.

Penyelesaian Boost.Preprocessor

Untuk mengautomasikan proses penukaran, perpustakaan Boost.Preprocessor boleh digunakan. Penyelesaian ini membolehkan anda mentakrifkan enum dengan penukaran rentetan sekali gus:

#include <boost/preprocessor.hpp>

#define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators)                \
    enum name {                                                               \
        BOOST_PP_SEQ_ENUM(enumerators)                                        \
    };                                                                        \
                                                                              \
    inline const char* ToString(name v)                                       \
    {                                                                         \
        switch (v)                                                            \
        {                                                                     \
            BOOST_PP_SEQ_FOR_EACH(                                            \
                X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE,          \
                name,                                                         \
                enumerators                                                   \
            )                                                                 \
            default: return "[Unknown " BOOST_PP_STRINGIZE(name) "]";         \
        }                                                                     \
    }
Salin selepas log masuk

Menggunakan makro ini, enum jenis OS boleh ditakrifkan sebagai:

DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
Salin selepas log masuk

Pendekatan ini menyelesaikan penyelenggaraan isu yang berkaitan dengan penyelesaian naif dan secara dinamik menjana fungsi penukaran yang diperlukan.

Lain-lain Pertimbangan

Dalam C , adalah mungkin untuk melaksanakan ToString sebagai operator yang berlebihan, menjadikannya lebih ringkas untuk penggunaan. Selain itu, penyelesaian ini boleh disesuaikan untuk digunakan dalam C juga.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Pembolehubah Enum dengan Cekap kepada Perwakilan Rentetannya dalam C?. 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