La conversion des variables de type Enum en chaînes est une exigence courante en programmation. Par exemple, cela devient nécessaire lors de l'impression de valeurs d'énumération dans un format lisible ou lors de leur transmission en tant que paramètres à des fonctions qui attendent des arguments de chaîne.
Une approche simple de l'énumération la conversion de type consiste à écrire une fonction manuelle pour chaque énumération. Par exemple, pour convertir une énumération OS_type :
enum OS_type { Linux, Apple, Windows }; inline const char* ToString(OS_type v) { switch (v) { case Linux: return "Linux"; case Apple: return "Apple"; case Windows: return "Windows"; default: return "[Unknown OS_type]"; } }
Cependant, cette approche est sujette à des problèmes de maintenance à mesure que le nombre d'énumérations augmente.
La bibliothèque Boost.Preprocessor fournit un moyen plus élégant et automatisé de gérer les conversions de type enum. Il utilise le préprocesseur pour générer dynamiquement des fonctions de conversion. Les deux macros suivantes y parviennent :
#define X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE(r, data, elem) \ case elem : return BOOST_PP_STRINGIZE(elem); #define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators) \ enum name { \ BOOST_PP_SEQ_ENUM(enumerators) \ }; \ \ inline const char* ToString(name v) \ { \ switch (v) \ { \ BOOST_PP_SEQ_FOR_EACH( \ X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE, \ name, \ enumerators \ ) \ default: return "[Unknown " BOOST_PP_STRINGIZE(name) "]"; \ } \ }
À l'aide de ces macros, l'énumération OS_type peut être définie comme suit :
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
Dans C , la fonction ToString peut être utilisée pour convertir des valeurs d'énumération en chaînes :
#include <iostream> int main() { OS_type t = Windows; std::cout << ToString(t) << " " << ToString(Apple) << std::endl; }
Pour C, le La fonction ToString peut être implémentée sous forme de macro au lieu d'une surcharge de fonction :
#define ToString(t) \ [Unknown ""##t] [Linux "Linux"] [Apple "Apple"] [Windows "Windows"]
Cet article a présenté deux méthodes pour convertir des variables de type enum en chaînes : l'approche naïve utilisant des fonctions manuelles et une solution basée sur un préprocesseur avec Boost.Preprocessor. L'approche basée sur le préprocesseur est plus robuste et plus facile à maintenir, en particulier lorsqu'il s'agit d'un grand nombre d'énumérations.
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!