Maison > développement back-end > C++ > Comment convertir automatiquement les énumérations C en chaînes sans modifier le code source ?

Comment convertir automatiquement les énumérations C en chaînes sans modifier le code source ?

Susan Sarandon
Libérer: 2024-12-17 18:51:16
original
417 Les gens l'ont consulté

How to Automatically Convert C   Enums to Strings Without Modifying Source Code?

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&amp; operator<<(std::ostream&amp; 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;
}
Copier après la connexion

Dans le fichier colours.def, définissez les énumérations comme suit :

X(Red)
X(Green)
X(Blue)
X(Cyan)
X(Yellow)
X(Magenta)
Copier après la connexion

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

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!

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