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
Mary-Kate Olsenasal
2024-12-18 21:59:11446semak imbas

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

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) "]";         \
        }                                                                     \
    }

Menggunakan makro ini, enum jenis OS boleh ditakrifkan sebagai:

DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))

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!

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