Je trouve souvent que j'ai besoin de convertir une énumération en chaîne de caractères en c++
Je finis toujours par faire:
enum Enum{ Banana, Orange, Apple } ;
char * getTextForEnum( int enumVal )
{
switch( enumVal )
{
case Enum::Banana:
return "bananes et singes";
case Enum::Orange:
return "Rond et orange";
case Enum::Apple:
return "POMME";
default:
return "Non reconnu..";
}
}
Y a-t-il un meilleur ou un idiome reconnu pour faire cela?
2 votes
Peut-être utiliser
std::map
au lieu de l'énumération et du switch? Avec un peu d'encapsulation dans un objet, vous pourriez le rendre suffisamment intelligent pour être réutilisable en tant que recherche de code d'erreur et gestionnaire pour toutes vos applications.5 votes
Une amélioration consiste à ne pas inclure la clause 'default:' tout en augmentant le niveau d'avertissement de votre compilateur et en traitant les avertissements comme des erreurs. De cette façon, si vous étendez un jour la liste des énumérations, le compilateur vous avertira et échouera sur votre déclaration switch, vous rappelant d'étendre également le switch. Certaines personnes disent que vous devriez toujours avoir une valeur par défaut, mais je pense que c'est un scénario où le manque de celle-ci peut en fait vous aider.