User Defined enum in vector



  • Abend!

    Ich habe eine Klasse mit einem Vektor von enums:

    class Foo {
    private:
    
       std::vector<MyEnum> values;
    
    };
    

    Die Klasse Foo wird Teil einer Bibliothek. Das Problem ist nun, dass Benutzer der Lib ihr eigenes enum MyEnum definieren sollen. Sprich die Nutzer legen ein enum an:

    enum MeinEnum { }
    

    und im vektor Foo::values sollen dann MeinEnum's drinliegen. Wie kann man sowas machen? 😕



  • Mein erster Gedanke wäre es, das ganze als Template zu lösen. Aber dazu würde der Nutzer den Quelltext deiner Klasse benötigen.

    Für weitere Vorschläge muß ich mal ein wenig nachfragen: Was ist der Sinn dieser Aktion? Und was will/soll deine Klasse mit den enum's machen können?



  • Ist ein bißchen schwer zu erklären. Das wird ein Eingabesystem und der Benutzer meiner Lib soll Eingabe Enums definieren, z.B. für Aktionen:

    enum ACTION {
       ACTION_MOVE_LEFT,
       ACTION_OPEN_DOOR
    
    };
    

    Es muss immer ein enum ACTION geben, nur die Werte sind abhängig vom konkreten Spiel. Meine Klasse Foo macht im Grunde garnichts mit den ACTION in dem vector. Die werden nur gespeichert und vergleicht.

    Aber wie bringe ich User Defined Enums in meinen Foo Vektor? 😕



  • Baumschachtel schrieb:

    Meine Klasse Foo macht im Grunde garnichts mit den ACTION in dem vector. Die werden nur gespeichert und vergleicht.

    Und wozu muß sie dann wissen, daß das ein enum ist? Ich bin immer noch für ein Template, aber da kommt sicher bald jemand mit der großen Design-Keule:

    template<typename ACTION>
    class Foo
    {
      vector<ACTION> values;
      ...
    };
    


  • Baumschachtel schrieb:

    Es muss immer ein enum ACTION geben, nur die Werte sind abhängig vom konkreten Spiel. Meine Klasse Foo macht im Grunde garnichts mit den ACTION in dem vector. Die werden nur gespeichert und vergleicht.

    Wenn das Enum ACTION und dessen Enumeratoren selbst irrelevant sind, könntest du ja auch int s abspeichern. Die beiden Typen sind kompatibel, in die eine Richtung ist allerdings ein Cast erforderlich.


Anmelden zum Antworten