Combler le fossé : convertir des chaînes C en types énumérés
En C, la conversion de chaînes en types énumérés (énumérations) présente un défi qui peut être résolus à l’aide de diverses techniques. Même si une instruction switch peut sembler une solution simple, sa longueur peut devenir lourde. Cet article explore des approches alternatives pour simplifier la conversion de chaîne en énumération.
Une méthode consiste à utiliser un mappage entre les chaînes et leurs énumérations correspondantes. Une carte standard ou unordered_map peut être utilisée à cet effet, avec les chaînes comme clés et les énumérations comme valeurs. Cependant, remplir la carte peut être aussi fastidieux que créer une instruction switch.
C 11 à la rescousse
Avec l'avènement de C 11, remplir une carte avec les paires chaîne-énumération deviennent beaucoup plus faciles. L'extrait de code suivant démontre cette simplicité :
static std::unordered_map<std::string, E> const table = {{"a",E::a}, {"b",E::b}}; auto it = table.find(str); if (it != table.end()) { return it->second; } else { error() }
Dans ce code, la variable table contient une carte statique qui associe des chaînes à des énumérations. Lorsque la chaîne donnée str est recherchée dans la carte, sa valeur enum correspondante est renvoyée si elle est trouvée, ou une erreur est signalée dans le cas contraire.
Conclusion
Lors de l'utilisation d'une carte pour convertir des chaînes en énumérations est pratique, il est important de noter que remplir la carte peut être plus complexe que de créer une instruction switch. Cependant, avec la syntaxe simplifiée de C 11, remplir la carte devient une tâche beaucoup plus simple.
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!