enum class de type chaîne de caractères en C++
- Renseignements:
Il y a une classe en C++11 est connu comme enum class lequel vous pouvez stocker des variables à l'intérieur. Cependant, j'ai seulement vu le type de la classe de char:
enum class : char {
v1 = 'x', v2 = 'y'
};
Question:
Est-il possible que je peux exprimer ce enum class de type chaîne de caractères?
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 suis pas sûr si je suis en train de faire ou pas. La raison pourquoi je veux utiliser de chaînes, c'est qu'ils sont capables de tenir plusieurs personnages en même temps, il les rend plus utile pour mon code.
ok, donc cela signifie que nous ne pouvons qu'exprimer enum class comme char, et pas int, string, ou de tout autre type.
Tout dans votre commentaire est incorrect. Type sous-jacent d'une étendue enum est
Il y a une classe en C++11 est connu comme enum class ... non, il n'y a pas de classe,
Oui je voulais dire l'étendue des énumérations, je ne connais pas la terminologie.
Tout dans votre commentaire est incorrect. Type sous-jacent d'une étendue enum est
int
seulement si vous n'avez pas spécifié un type, qui n'est pas le cas dans l'exemple ci-dessus. Et char
est certainement pas un int
.Il y a une classe en C++11 est connu comme enum class ... non, il n'y a pas de classe,
enum class
est utilisé pour définir l'étendue des énumérations. Les réponses ci-dessous le lien vers la documentation qui explique ce que ceux qui sont.Oui je voulais dire l'étendue des énumérations, je ne connais pas la terminologie.
OriginalL'auteur Kourosh | 2017-04-20
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen de le faire en C++11 et C++14. Toutefois, vous devriez envisager d'avoir quelques enum class, puis le code de certaines fonctions explicites ou exploitants pour convertir de et vers
std::string
-s.Que le phrasé n'est pas correct: un enum classe ne permet pas de stocker des variables (mais agents recenseurs).
De sorte que vous pourriez code:
(ce qui est possible, comme répondu par druckermanly, parce que
char
est un type intégral; bien sûr, vous ne pouvez pas utiliser des chaînes à la place)puis définir certains
MyEnum string_to_MyEnum(const std::string&);
fonction (il n'aurait probablement lancer une exception si l'argument est inattendu de la chaîne) et un autrestd::string MyEnum_to_string(MyEnum);
. Vous pourriez même envisager aussi d'avoir quelques opérateur de cast de les appeler (mais je ne trouve pas que lisible, dans votre cas). Vous pouvez également définir uneclass MyEnumValue
contenant un seul membre de données deMyEnum
type et pour que la classe ayant opérateur de cast, par exempleAppropriés en plus de choses dans
MyEnumValue
(voir la la règle des cinq), vous pourriez presque toujours utiliserMyEnumValue
au lieu deMyEnum
(qui peut-être pourrait même être à l'intérieurclass MyEnumValue
)Non, vaut mieux utiliser la terminologie standard de les agents recenseurs.
OriginalL'auteur Basile Starynkevitch
Non, ce n'est pas possible.
http://en.cppreference.com/w/cpp/language/enum états:
Le point clé étant "font partie intégrante de type" -- une chaîne de caractères n'est pas un type intégral.
OriginalL'auteur druckermanly
Compilateur convertit en interne de votre char à son équivalent int représentation (ASCII). Il ne sera donc pas possible d'utiliser des chaînes de caractères à la place.
OriginalL'auteur stanleyli