Bonjour,
J'ai dans un exercice un type énuméré dont j'aimerais pouvoir afficher les valeurs comme des strings. En effet, le code
enum T { A, B, C, D };
cout << A << " " << B << endl;
donne la sortie suivante : '0 1'.
Pour afficher 'A B' j'ai donc pensé à déclarer une variable globale const array<string, 4> c = { "A", "B", "C", "D" }; pour pouvoir utiliser comme suit :
cout << c[A] << " " << c[B] << endl;
qui me fourni le résultat souhaité. L’inconvénient de cette méthode est qu'elle utilise une variable globale et dans le mooc il a été répété plusieurs fois que c'était mauvais. Une utilisation dans un cas comme celui ci est-elle excusable ou les variables globales sont à fuir inconditionnellement ? Si tel est le cas, comment peut-on remplacer ce système ? Je trouve qu'utiliser un switch / case pour cela est peu élégant et assez lourd.
(PS : constexpr array<string, 4> c = { "A", "B", "C", "D" }; ne fonctionne pas, j'ai le message d'erreur suivant : "the type 'const std::array<std::__cxx11::basic_string<char>, 5>' of constexpr variable 'c' is not literal". Si quelqu'un a une explication...)
Merci pour votre aide