Maison > développement back-end > C++ > Comment mapper efficacement des énumérations C à des chaînes ?

Comment mapper efficacement des énumérations C à des chaînes ?

Mary-Kate Olsen
Libérer: 2024-12-10 01:22:12
original
546 Les gens l'ont consulté

How to Efficiently Map C   Enums to Strings?

Comment mapper facilement des énumérations C en chaînes

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.

Standard Approche

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");
  }
}
Copier après la connexion

Cette méthode manque cependant d'élégance et ressemble à une approche de style C.

Solution basée sur un modèle

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];
Copier après la connexion

Cette méthode fournit un mécanisme de mappage propre et efficace.

map_init Helper Class

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&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);
}
Copier après la connexion

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");
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal