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 ) statt void 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


Anmelden zum Antworten