enum: mehrfache Bezeichner?
-
Hi.
Ich habe in meinem Projekt 3 enum's:enum Configtype { Bool, Integer, Position, None }; enum Element { StaticText, VarText, Checkbox, Select, Number, GroupStart, GroupEnd, None }; enum Key { Up, Right, Down, Left, Enter, Minus, KpUp, KpRight, KpDown, KpLeft, None };Wie man sieht, haben alle 3 einen Bezeichner mit Namen None - doch der Compiler spuckt beim 2. und 3. nen Fehler aus, dass None schon definiert ist (logisch).
Ich benutze im Quellcode aber eh immer nur <Enum>::<Bezeichner>. Kann ich es irgendwie unterbinden, dass ich nur <Bezeichner> nutzen kann, und so auch gleichzeitig ermöglichen, 3x ein None zu haben?Gruß, Chris
-
Nein, geht so nicht. Eine mögliche Lösung: enums in structs (struct-Namen wie jetzige enum-Namen) kapseln, dann ist <Struct>::<Bezeichner> sogar Standard-konform. Nur leider wird's dann bei der Typangabe des enums hässlich (
void foo( Element::E::VarText a )stattvoid foo( Element::VarText a )).
-
Namespaces wären hier auch eine Mögliche Lösung, die ich sehr gerne nutze. Du schiebst jeden enum in einen namespace (vorzugswise gleicher Name), zugreifen würdest du dann über <Namespace>::<Bezeichenr>. Für Variablen des Enums würdest du dann <Namespace>::<Enum> nutzen. Zum glück löst sich das Problem mit enum class bald in Luft auf.
-
Xebov schrieb:
Namespaces wären hier auch eine Mögliche Lösung, die ich sehr gerne nutze.
Ok, ne Ecke besser als structs
Jedenfalls braucht man 'nen extra Namensraum (oder ein ekliges Prefix für die Werte).
-
Hi.
Namespace FTW!
Danke
Gruß, Chris