Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memetakan C Enum dengan Cekap 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 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.
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.
Untuk kemudahan sintaksis, kelas pembantu berikut boleh digunakan:
template<typename T> struct map_init_helper { map_init_helper(T& d) : data(d) {} T& data; map_init_helper& operator() (typename T::key_type const& key, typename T::mapped_type const& value) { data[key] = value; return *this; } }; template<typename T> map_init_helper<T> map_init(T& 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!