Conversion de variables d'énumération en chaînes
Lorsque vous travaillez avec des variables d'énumération, il peut être nécessaire d'imprimer les représentations de chaîne correspondantes au lieu de valeurs entières . Pour réaliser cette conversion, plusieurs approches sont disponibles.
Solution naïve
Une approche simple consiste à créer une fonction qui convertit chaque valeur d'énumération individuelle en chaîne :
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]"; } }
Bien que cette méthode soit simple, elle devient peu pratique lorsqu'il s'agit de traiter un grand nombre d'énumérations valeurs.
Solution Boost.Preprocessor
Pour automatiser le processus de conversion, la bibliothèque Boost.Preprocessor peut être utilisée. Cette solution vous permet de définir une énumération avec des conversions de chaînes en une seule fois :
#include <boost/preprocessor.hpp> #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 cette macro, l'énumération OS_type peut être définie comme :
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
Cette approche résout le problème de maintenance problèmes associés à la solution naïve et génère dynamiquement les fonctions de conversion nécessaires.
Autre Considérations
En C , il est possible d'implémenter ToString en tant que surcharge d'opérateur, ce qui le rend plus concis à utiliser. De plus, cette solution peut également être adaptée pour une utilisation en C.
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!