Chaîne C ++ à enum
Est-il un moyen simple en C++ pour convertir une chaîne en un enum (similaire à Enum.Parse
en C#)? Une instruction switch serait très long, donc je me demandais si il existe un moyen plus simple de faire cela?
EDIT:
Merci pour toutes vos réponses. J'ai réalisé qu'il y avait un moyen beaucoup plus simple de le faire pour mon cas particulier. Les cordes toujours contenait le personnage de " S " suivi d'un nombre, donc j'ai juste fait
int i = atoi(myStr.c_str() + 1);
et puis a un interrupteur sur i.
source d'informationauteur Daniel
Vous devez vous connecter pour publier un commentaire.
Un
std::map<std::string, MyEnum>
(ouunordered_map
) pourrait le faire facilement. Le remplissage de la carte serait tout aussi fastidieuse que l'instruction switch.Utilisation
std::map<std::string, Enum>
et l'utilisationboost::map_list_of
à facilement l'initialiser.Exemple,
vu cet exemple quelque part
- Je utiliser ce "trucs et astuces" > http://codeproject.com/Articles/42035/Enum-to-String-and-Vice-Versa-in-C
Après
insérer
Beau travail, si les valeurs enum ne sont pas dublicate.
Exemple dans le code
vice versa
Il n'y a pas de "built-in", mais il existe des moyens pour obtenir ce par le stockage de la paire de valeur-nom dans un tableau
.....
En bref: il n'y a aucun. En C++ les énumérations sont des valeurs statiques et non pas des objets comme en C#. Je vous suggère d'utiliser une fonction avec certains
if else
consolidés.Vous pouvez utiliser une macro pour minimiser les répéter. Voici l'astuce: Les énumérations, les Macros, Unicode et Jeton-Coller
Il n'est pas possible parce que les noms ne sont pas disponibles au moment de l'exécution. Lors de la compilation de chaque enum est remplacé par la valeur entière correspondant.
Alors qu'il n'y a pas de solution directe, il existe quelques solutions de contournement possibles.
Prendre un coup d'oeil à cette question: Moyen facile d'utiliser des variables de types enum comme une chaîne de caractères en C?
Pas, vous devrez utiliser un if/then construction, ou l'utilisation d'une carte ou d'une table de hachage ou d'un autre type de associative structure de données pour faciliter cela.
cela a fonctionné pour moi:
bien, vous pouvez simplement faire vérifier avant:
Après "cookie" existent vérifier, vous pouvez obtenir la valeur à utiliser:
espérons que cette aide