- Informations d'arrière-plan:
Il existe une classe dans C++ 11 appelée classe enum dans laquelle vous pouvez stocker des variables. Cependant, j'ai seulement vu le type de la classe être char:
enum class : char {
v1 = 'x', v2 = 'y'
};
- Question:
Est-il possible d'exprimer cette classe d'énumération de type chaîne?
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 bien ou pas. La raison pour laquelle je veux 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.
Il n'y a aucun moyen de faire cela en C++ 11 ou C++ 14. Cependant, vous devriez envisager d'avoir quelques enum class , puis codez des fonctions explicites ou des opérateurs pour les convertir de et en std::string
- s.
Il existe une classe dans C++ 11 appelée classe enum dans laquelle vous pouvez stocker des variables.
Ce phrasé n'est pas correct: une classe d'énumération ne stocke pas les variables (mais les énumérateurs).
Donc, vous pourriez coder:
enum class MyEnum : char {
v1 = 'x', v2 = 'y'
};
(Ceci est possible, comme avec druckermanly , parce que 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&);
(il y aurait 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 les appeler opérateur de diffusion (mais je ne trouve pas cela lisible, dans votre cas). Vous pouvez également définir un class MyEnumValue
contenant un seul membre de données de type MyEnum
et faire en sorte que cette classe ait opérateur de conversion , 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 d'éléments appropriés dans MyEnumValue
(voir la règle de cinq ), vous pouvez presque toujours utiliser MyEnumValue
au lieu de MyEnum
(qui pourrait même être interne à class MyEnumValue
)
Non, ce n'est pas possible.
http://fr.cppreference.com/w/cpp/language/enum stipule:
Les valeurs des constantes sont des valeurs d'un type entier appelé type sous-jacent de l'énumération.
Le point clé étant "type intégral" - une chaîne n'est pas un type intégral.
Le compilateur convertit en interne votre caractère en sa représentation int équivalente (ASCII). Donc, il ne serait pas possible d'utiliser une chaîne à la place.