TemplateVector möglich?



  • Hey 🙂

    Ich habe mich gerade gefragt ob man einen Vector von einem Template mit unterschiedlichen variablentypen erstellen kann?

    ich würde gerne von soeinem Template einen vector machen:

    template <typename T>
    class Array
    {
      private:
        T* m_ptr_to_var;
        string m_command;
        T m_max;
        T m_min;
      public:
    
    };
    


  • vector<array<int, 16>>
    

    So?



  • Es geht es darum das ich z.b. einmal ein <int> und einmal ein <float> nutzen möchte. aber letztendlich nur einen vector<command> haben möchte. (die Templateklasse heißt eigentlich command, ich hab nur vergessen das zu ändern.)



  • boost::any



  • Also moechtest du sowas wie dznamische Typisierung oder type erasure?



  • ja ich denke das es so heißt.

    ich habs gerade getestet.

    vector<Command> // funktioniert nicht, da das template keinen typ hat.
    vector<Command<int>> // funktioniert, ist aber nicht das was ich möchte.
    

    Ich bräuchte einen vector der sowohl Command<int>s und Command<floats> beinhaltet.

    Wie der Name schon erahnen lässt, möchte ich dorthinein einige Kommandos speichern, über die ich durchiterieren möchte.



  • du könntest auch von Command ableiten:

    class Command
    {};
    
    class IntCommand : public Command
    {
      int value;
    };
    
    class FloatCommand : public Command
    {
      float value;
    };
    


  • struct AbstractCommand
    {
        virtual ~AbstractCommand();
    };
    
    template<typename T>
    struct ConcreteCommand : AbstractCommand
    {
        T Value;
    };
    
    typedef some_smart_ptr<AbstractCommand> CommandPtr;
    
    std::vector<CommandPtr> Commands;
    
    int main()
    {
       Commands.push_back( CommandPtr( new ConcreteCommand<int>() ) );
       Commands.push_back( CommandPtr( new ConcreteCommand<float>() ) );
    }
    

    Verdammt, zu spät 😉



  • DocShoe schrieb:

    Verdammt, zu spät 😉

    dafür aber als prinzipiell elegantere Template-Lösung 😉



  • cl90 schrieb:

    Ich habe mich gerade gefragt ob man einen Vector von einem Template mit unterschiedlichen variablentypen erstellen kann?

    Kommst du aus Java?

    Sicher dass du nicht einfach nur floats haben kannst, oder dass du nicht zwei Container (einen für int und einen für float ) haben willst?



  • Das grundsätzliche Missverständnis ist

    cl90 schrieb:

    (die Templateklasse heißt eigentlich command, ich hab nur vergessen das zu ändern.)

    Es handelt sich hier nicht um eine Templateklasse, sondern um eine Klassenvorlage (bzw. Klassentemplate). Command ist keine Klasse, und daher kannst du auch keinen Vektor davon haben. Genausowenig, wie du einfach

    std::vector v; // <-- geht nicht; std::vector ist keine Klasse.
    

    schreiben kannst.



  • Danke es gab viele hilfreiche Posts hier!
    Ich habe jetzt eine Klasse geschrieben die soweit alle Funktionalitäten von vector anbietet die ich brauche. Nur das ich 3 verschiedene Typen push_backen kann. Funktioniert gut 🙂

    Aber wenn ich Zeit habe, werde ich die abgeleiteten Klassen probieren! Die sehen gut aus.


Anmelden zum Antworten