Heim >Backend-Entwicklung >C++ >Wie ordnet man C-Enums effizient Strings zu?

Wie ordnet man C-Enums effizient Strings zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-10 01:22:12543Durchsuche

How to Efficiently Map C   Enums to Strings?

So ordnen Sie C-Enums ganz einfach 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.

Standard Ansatz

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.

Vorlagenbasierte Lösung

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.

map_init Helper Class

Zur syntaktischen Vereinfachung Folgendes Hilfsklasse kann verwendet werden:

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);
}

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn