Heim >Backend-Entwicklung >C++ >Wie ordnet man C-Enums effizient Strings zu?
Bei der Verwendung von Enums, die in Bibliotheksheadern von Drittanbietern definiert sind, muss ein Mechanismus zum Konvertieren von Enum-Werten in Benutzerwerte eingerichtet werden -definierte Zeichenfolgen und umgekehrt.
Ein einfacher Ansatz beinhaltet die Erstellung einer Reihe von Funktionen:
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"); } }
Dieser Methode fehlt es jedoch an Eleganz und sie ähnelt einem C-Stil-Ansatz.
Ein ausgefeilterer Ansatz nutzt Vorlagen:
std::map<MyEnum, char const*> MyMap; //... MyMap.insert(std::make_pair(VAL1, "Value 1")); //... char const* enumString = MyMap[e];
Diese Methode bietet einen sauberen und effizienten Zuordnungsmechanismus.
Zur syntaktischen Vereinfachung Folgendes Hilfsklasse kann verwendet werden:
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); }
Mit diesem Hilfsprogramm kann die Zuordnung wie folgt durchgeführt werden folgt:
std::map<MyEnum, char const*> MyMap; map_init(MyMap) (VAL1, "Value 1") (VAL2, "Value 2") (VAL3, "Value 3");
Diese vereinfachte Syntax macht ausführliche Einfügeanweisungen überflüssig.
Das obige ist der detaillierte Inhalt vonWie ordnet man C-Enums effizient Strings zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!