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
Lepaskan: 2024-12-10 01:22:12
asal
575 orang telah melayarinya

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");
  }
}
Salin selepas log masuk

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];
Salin selepas log masuk

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);
}
Salin selepas log masuk

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");
Salin selepas log masuk

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