C++ List Struct dynamisch Datentyp



  • Mahlzeit,

    ist es möglich, wenn man eine Liste mittels Struct erstellt den Typ dynamisch zu machen.?

    Also als Beispiel: ich habe die Klassen Auto & Haus.
    Ich möchte jetzt nicht für Auto und Haus ein struct erstellen welches wie folgt aussehen würde:

    struct AutoList{
    	Auto data;
    	struct ownList *next;
    };
    // Liste erstellen
    AutoList *auto1; 
    auto->data = new Auto;
    

    Sondern so das ich sagen kann um welchen Typ sich es bei Data handelt. So ungefähr

    struct ownList{
    	Object data;
    	struct ownList *next;
    };
    
    
    ownList<Auto>  *auto1; 
    ownList<Haus> *haus1; 
    
    auto1->data = new Auto;
    haus1->data = new Haus;
    


  • @swoopo sagte in C++ List Struct dynamisch Datentyp:

    dynamisch

    Wie dynamisch? Steht der Typ zur compiletime fest oder erst zur runtime?

    @swoopo sagte in C++ List Struct dynamisch Datentyp:

    ownList<Auto>  *auto1; 
    ownList<Haus> *haus1; 
    
    auto1->data = new Auto;
    haus1->data = new Haus;
    

    Mit ownList<Auto> und ownList<Haus> beantwortest Du Dir doch eigentlich schon selbst die Frage: Templates.

    Du weißt selbst, saß auto1 und haus1 uninitialisierte Pointer sind? Warum sind es überhaupt Pointer?

    AutoList und ownList schauen aus wie Listenknoten (Nodes). Nodes sind keine Listen, eine Liste ist kein Node. Eine Liste besteht üblicherweise aus einem Pointer auf ihr erstes und ihre letztes Element (Node) und eventuell noch ihrer Länge:

    template<typename T>
    struct node_t {
        T data = T{};
        node_t<T> *next = nullptr;
    };
    
    template<typename T>
    struct list_t {
        node_t<T> *first = nullptr;
        node_t<T> *last = nullptr;
        // std::size_t length = 0;  // ist eine sehr einfach aktuell zu haltende Größe die einige operationen
                                    // sehr erleichtern kann, operator==() zB.
    
        /* und Funktionen die die Liste verwalten ...
        bool is_empty() const { return !first; }
        std::size_t size() const { return length; }
        void push_front(T);
        void push_back(T);
        T pop_front();
        T pop_back();
        T front() const;
        T back() const;
        iterator insert(iterator, T);
        ...
        */
    };
    
    // ...
    
    list_t<Auto> autos; 
    list_t<Haus> haeuser; 
    


  • Sorry falsch ausgedrückt.

    Der Typ steht natürlich fest. Ich möchte nur halt sagen um was für einen Typ es sich handelt.

    struct ownList{
    	Object data;
    	struct ownList *next;
    };
    

    Also das ich z.B mit ownList<Auto> sage das sich es bei Object data um ein Object von Typ Auto handelt.



  • @swoopo sagte in C++ List Struct dynamisch Datentyp:

    Der Typ steht natürlich fest. Ich möchte nur halt sagen um was für einen Typ es sich handelt.

    Siehe letztes Edit oben:

    @Swordfish sagte in C++ List Struct dynamisch Datentyp:

    Mit ownList<Auto> und ownList<Haus> beantwortest Du Dir doch eigentlich schon selbst die Frage: Templates.


Log in to reply