Conversion efficace des chaînes en énumérations en C
Lorsque vous travaillez avec des énumérations en C, vous pouvez rencontrer le besoin de convertir les chaînes en leurs correspondantes énumérer les valeurs. Même si une instruction switch peut suffire, elle peut devenir fastidieuse avec de nombreuses valeurs d'énumération. Cet article explore des approches alternatives pour une conversion efficace de chaîne en énumération.
Solution std::map
Une approche consiste à créer un std::map
C 11 Syntactic Sugar
Pour C 11 et versions ultérieures, une solution plus concise devient disponible. En utilisant std::unordered_map initialisé statiquement, vous pouvez remplir la carte avec élégance en utilisant des accolades :
static std::unordered_map<std::string,E> const table = { {"a",E::a}, {"b",E::b} };
Pour effectuer la recherche, utilisez simplement la méthode find() sur la table et vérifiez si l'itérateur est valide. S'il est trouvé, vous pouvez récupérer directement la valeur enum correspondante.
Exemple
Par exemple, considérons la déclaration enum suivante :
enum class E { a, b, c };
Et une chaîne "a", vous pouvez la convertir en la valeur enum correspondante à l'aide du tableau :
auto it = table.find("a"); if (it != table.end()) { E result = it->second; // ... }
Cette approche fournit un aperçu concis et solution efficace pour convertir des chaînes en énumérations en C , réduisant ainsi la complexité des longues instructions switch.
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!