- Informations générales:
Il existe une classe en C ++ 11 connue sous le nom de classe enum dans laquelle vous pouvez stocker des variables. Cependant, je n'ai vu que le type de la classe être char:
enum class : char {
v1 = 'x', v2 = 'y'
};
- Question:
Existe-t-il un moyen d'exprimer cette classe enum de type string?
Par exemple,
enum class : string{
v1 = "x", v2 = "y"
};
- Ce que je pense:
J'ai essayé de l'utiliser, mais j'ai eu des erreurs, je ne sais pas si je le fais correctement ou pas. La raison pour laquelle je souhaite utiliser des chaînes est qu'elles sont capables de contenir plusieurs caractères en même temps, ce qui les rend plus utiles pour mon code.
3 réponses
Il n'y a aucun moyen de faire cela en C ++ 11 ou C ++ 14. Cependant, vous devriez envisager d'avoir une classe enum, puis coder certaines fonctions ou opérateurs explicites pour le convertir de et en std::string
- s.
Il existe une classe en C ++ 11 connue sous le nom de classe enum dans laquelle vous pouvez stocker des variables.
Ce libellé n'est pas correct: une classe enum ne stocke pas de variables (mais des énumérateurs ).
Vous pouvez donc coder:
enum class MyEnum : char {
v1 = 'x', v2 = 'y'
};
(cela est possible, car répondu par druckermanly, car char
est un type intégral ; bien sûr, vous ne pouvez pas utiliser de chaînes à la place)
Puis définissez une fonction MyEnum string_to_MyEnum(const std::string&);
(elle lèverait probablement une exception si l'argument est une chaîne inattendue) et une autre std::string MyEnum_to_string(MyEnum);
. Vous pourriez même envisager de demander à un opérateur de cast de les appeler (mais je ne trouvez cela lisible, dans votre cas). Vous pouvez également définir un class MyEnumValue
contenant un seul membre de données de type MyEnum
et avoir cette classe ayant opérateur de cast, par exemple
class MyEnumValue {
const MyEnum en;
public:
MyEnumValue(MyEnum e) : en(e) {};
MyEnumValue(const std::string&s)
: MyEnumValue(string_to_MyEnum(s)) {};
operator std::string () const { return MyEnum_to_string(en);};
operator MyEnum () const { return en };
//// etc....
};
Avec plus de choses appropriées dans MyEnumValue
(voir la règle de cinq) vous pouvez presque toujours utiliser MyEnumValue
au lieu de MyEnum
(qui peut même être interne à class MyEnumValue
)
Non, ce n'est pas possible.
http://en.cppreference.com/w/cpp/language/enum déclare:
Les valeurs des constantes sont des valeurs d'un type intégral appelé type sous-jacent de l'énumération.
Le point clé étant le "type intégral" - une chaîne n'est pas un type intégral.
Le compilateur convertit en interne votre char en sa représentation int équivalente (ASCII). Il ne serait donc pas possible d'utiliser une chaîne à la place.
De nouvelles questions
c++
C ++ est un langage de programmation à usage général. Il a été conçu à l'origine comme une extension de C et a une syntaxe similaire, mais c'est maintenant un langage complètement différent. Utilisez cette balise pour les questions sur le code (à être) compilé avec un compilateur C ++. Utilisez une balise spécifique à la version pour les questions liées à une révision standard spécifique [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] ou [C ++ 23], etc. .