Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memetakan C Enum dengan Cekap kepada Rentetan?

Bagaimana untuk Memetakan C Enum dengan Cekap kepada Rentetan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 01:22:12555semak imbas

How to Efficiently Map C   Enums to Strings?

Cara Mudah Memetakan Enum C kepada Rentetan

Apabila menggunakan enum yang ditakrifkan dalam pengepala perpustakaan pihak ketiga, adalah perlu untuk mewujudkan mekanisme untuk menukar nilai enum kepada pengguna rentetan dan maksiat yang ditentukan sebaliknya.

Pendekatan Standard

Pendekatan mudah melibatkan penciptaan satu siri fungsi:

enum MyEnum {VAL1, VAL2,VAL3};

String getStringFromEnum(MyEnum e)
{
  switch e
  {
  case VAL1: return "Value 1";
  case VAL2: return "Value 2";
  case VAL1: return "Value 3";
  default: throw Exception("Bad MyEnum");
  }
}

Kaedah ini, bagaimanapun, tidak mempunyai keanggunan dan menyerupai gaya C pendekatan.

Penyelesaian Berasaskan Templat

Pendekatan yang lebih canggih menggunakan templat:

std::map<MyEnum, char const*> MyMap;
//...
MyMap.insert(std::make_pair(VAL1, "Value 1"));
//...
char const* enumString = MyMap[e];

Kaedah ini menyediakan pemetaan yang bersih dan cekap mekanisme.

map_init Helper Kelas

Untuk kemudahan sintaksis, kelas pembantu berikut boleh digunakan:

template<typename T> struct map_init_helper
{
    map_init_helper(T&amp; d) : data(d) {}
    T&amp; data;
    map_init_helper&amp; operator() (typename T::key_type const&amp; key, typename T::mapped_type const&amp; value)
    {
        data[key] = value;
        return *this;
    }
};

template<typename T> map_init_helper<T> map_init(T&amp; item)
{
    return map_init_helper<T>(item);
}

Dengan pembantu ini, pemetaan boleh dicapai seperti berikut:

std::map<MyEnum, char const*> MyMap;
map_init(MyMap)
    (VAL1, "Value 1")
    (VAL2, "Value 2")
    (VAL3, "Value 3");

Sintaks yang dipermudahkan ini menghapuskan keperluan untuk pernyataan sisipan bertele-tele.

Atas ialah kandungan terperinci Bagaimana untuk Memetakan C Enum dengan Cekap kepada Rentetan?. 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