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>
undownList<Haus>
beantwortest Du Dir doch eigentlich schon selbst die Frage: Templates.Du weißt selbst, saß
auto1
undhaus1
uninitialisierte Pointer sind? Warum sind es überhaupt Pointer?AutoList
undownList
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>
undownList<Haus>
beantwortest Du Dir doch eigentlich schon selbst die Frage: Templates.