Comment convertir des énumérations C en chaînes
Lorsque vous travaillez avec des énumérations C nommées, vous pouvez rencontrer des scénarios dans lesquels la conversion d'une valeur d'énumération en sa correspondante la représentation sous forme de chaîne est nécessaire. Bien que plusieurs approches existent pour cette conversion, cet article répond à une requête spécifique concernant la génération de fonctions permettant de convertir toutes les énumérations d'un projet en chaînes sans modifier le code source.
X-Macros : une solution complète
L'approche recommandée consiste à utiliser des macros X. Un exemple d'implémentation est présenté ci-dessous :
#include <iostream> enum Colours { # define X(a) a, # include "colours.def" # undef X ColoursCount }; char const* const colours_str[] = { # define X(a) #a, # include "colours.def" # undef X 0 }; std::ostream& operator<<(std::ostream& os, enum Colours c) { if (c >= ColoursCount || c < 0) return os << "???"; return os << colours_str[c]; } int main() { std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl; }
Dans le fichier colours.def, définissez les énumérations comme suit :
X(Red) X(Green) X(Blue) X(Cyan) X(Yellow) X(Magenta)
Cette méthode offre un moyen flexible de générer des fonctions de conversion pour tous énumérations dans votre projet sans apporter aucune modification à votre code source.
Chaîne personnalisable Génération
Vous pouvez également opter pour une méthode qui permet de personnaliser les représentations sous forme de chaîne générées. L'extrait de code suivant illustre comment y parvenir :
#define X(a, b) a, #define X(a, b) b, X(Red, "red") X(Green, "green") // etc.
Cette approche offre un meilleur contrôle sur les chaînes générées et peut être particulièrement utile lorsque vous avez besoin de personnalisations spécifiques pour votre application.
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!