L'extension d'un enum?
Dire que j'ai créer un enum, mais finalement quelqu'un veut ajouter à cette énumération, que fait-on?
ex:
blah.hpp
enum PizzaDressing {
DRESSING_OLIVES = 0,
DRESSING_CHEESE = 1
};
et dans mon FunkyPizza classe, il pourrait y avoir de poivre garnitures.
Alors, comment pourrais-je ajouter les poivrons sans évidemment modifier l'original enum?
Grâce
double possible de base enum l'héritage de classe
OriginalL'auteur jmasterx | 2011-04-16
Vous devez vous connecter pour publier un commentaire.
Depuis les énumérations sont généralement traitées comme certains de la taille d'un int dans le compilateur, tout ce que vous avez à faire est d'effectuer par la suite
ou vous pourrait permettre de compter
Vous pouvez, si aucune de celles-ci est acceptable pour une raison quelconque, l'utilisation des mathématiques (
Cheese + 1
).Vous pouvez jouer avec l'enum dans presque n'importe quelle façon, vous pourriez avec une valeur numérique.
Noter que l'agent recenseur vous utilisez est généralement cuit dans le code par le compilateur, il n'apparaît pas, comme son nom, il suffit de valeur. Ainsi, la modification (extension), l'agent recenseur plus tard, n'aura pas d'effet du code qui a été construit.
Je pense que c'est légal syntaxe à utiliser une énumération dans un autre agent recenseur, avec des moulages, mais je n'ai jamais essayé. Cela peut fonctionner, mais est une sorte de vilain:
OriginalL'auteur ssube
C'est plus proche de ce que vous voulez: La Base de l'héritage de classe enum
il n'y a pas de fil de la nécromancie, car il n'y a pas de fils, seules les questions, les réponses et les commentaires ;).
OriginalL'auteur rubenvb
Qui allait être connu comme une "dynamique " enum". Au meilleur de ma connaissance, rien de tel n'existe en C++. Cependant, puisque nous sommes à l'aide de C++ et pas en C, vous pourriez faire quelque chose comme ceci:
enum
.map
est une structure de données construites et entretenues de manière dynamique lors de l'exécution: chaque accès sur unemap
élément est un appel de fonction.enum
est un nouveau moment de la compilation, c'est aussi complexe qu'uneint
.+1: bon appel..
Oui, cette carte des chaînes sera extrêmement lent par rapport à la normale enum. Et il n'y a pas de "dynamique enum" en C# (je devrais le savoir; j'ai écrit la solution de contournement pour ce problème: codeproject.com/KB/cs/symbol.aspx)
My bad, j'ai googlé "dynamique enum" et un tas de C# résultats venu donc, je suppose. J'ai fait des recherches un peu plus et je suppose que tous ces résultats étaient des gens poser cette même question. édité. Merci
N'est-ce pas
std::map
constexpr
depuis C++11 ? Si oui, serait-il bien de l'utiliser comme une dynamique de la mise en œuvre d'enum ?OriginalL'auteur Andrew Rasmussen
Vous ne pouvez pas modifier dynamiquement un enum, car il ne définit un nouveau type résolu au moment de la compilation. Ils sont mnémoniques pour le programmeur, à la compilation, ils sont convertis en nombres.
Cela dit, vous pouvez utiliser n'importe quel nombre n'est pas utilisé par l'original enum pour représenter ce que vous voulez:
Je ne sais pas. Je n'ai aucune idée de ce que vous essayez de faire. Je suis simplement expliquer la fonctionnalité de compilateur si l'on peut décider de la façon de procéder et de l'utiliser. Peut-on avoir une
map<string, int>
où certains noms ont des valeurs définies de manière dynamique au-dessus de 100, puis en dessous de 100 il y a un définis de manière statiqueenum
. De toute façon, c'est une situation à partir d'un nombre infini de possibilités, un programmeur peut faire et l'utilisation de la langue sur sa propre faveur.OriginalL'auteur lvella