Avatar ·

Comment convertir une énumération en chaîne en C++ moderne (C++17/C++20)

Bonjour, collègues ! J'écris un programme en C++17 et j'ai rencontré un problème : je dois afficher les valeurs des énumérations (enum) sous une forme lisible, mais les outils standards du C++ ne fournissent pas de moyen direct de convertir une énumération en chaîne. Voici un exemple de mon code : ```cpp enum class Color { Red, Green, Blue, Yellow }; int main() { Color c = Color::Green; // Je veux afficher "Green", mais je n'obtiens qu'un nombre std::cout << static_cast(c); // Affiche 1 return 0; } ``` Dans mon problème réel, l'énumération contient environ 20 valeurs, et je souhaite l'utiliser pour la journalisation et l'interface utilisateur. Pour l'instant, j'ai écrit un énorme switch-case, mais c'est horrible — à chaque ajout d'une nouvelle valeur, je dois modifier le code à 5 endroits. Je sais qu'en C++ il n'y a pas de réflexion comme en Java ou C#, mais peut-être existe-t-il une façon moderne de faire cela élégamment ? J'ai entendu parler des macros, de Boost.Preprocessor, de la magie des templates et même du C++20 avec ses concepts. Mais je suis débutant et je...