Lors de l'utilisation d'énumérations définies dans les en-têtes de bibliothèques tierces, il devient nécessaire d'établir un mécanisme pour convertir les valeurs d'énumération en valeurs utilisateur -chaînes définies et vice versa.
Une approche simple consiste à créer une série de fonctions :
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"); } }
Cette méthode manque cependant d'élégance et ressemble à une approche de style C.
Une approche plus sophistiquée utilise templates :
std::map<MyEnum, char const*> MyMap; //... MyMap.insert(std::make_pair(VAL1, "Value 1")); //... char const* enumString = MyMap[e];
Cette méthode fournit un mécanisme de mappage propre et efficace.
Pour des raisons de commodité syntaxique, les éléments suivants La classe d'assistance peut être utilisée :
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); }
Avec cette aide, le mappage peut être réalisé comme suit :
std::map<MyEnum, char const*> MyMap; map_init(MyMap) (VAL1, "Value 1") (VAL2, "Value 2") (VAL3, "Value 3");
Cette syntaxe simplifiée élimine le besoin d'instructions d'insertion verbeuses.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!