Templates in verketteten Listen
-
Erst einmal ein freundliches Hallo.
Ich bin neu hier im Forum und auch objekt-orientierte Programmierung ist quasi Neuland für mich.
Die nachfolgenden Code-Fragmente könnten, im Ansatz oder in der Ausführung, grundlegend
falsch sein. Auch die Begriffe bereiten mir noch ein wenig Schwierigkeiten, ich bitte das zu vernachlässigen.
Schon ein kleiner Hinweis würde mir weiterhelfen.Ich erzeuge Instanzen von verschiedenen Klassen, die von einer gemeinsamen Basisklasse erben.
Objekte vom selben Typ möchte ich in verketteten Listen ablegen können.
Dazu habe ich eine Template-Klasse geschrieben;template <class T> class Component{ public: Component(){t = new T;} .. T * add (Typ1 *typ1); .. private: T *t; }Diese soll die verschiedenen Objekte in einen Container (Component<T>) packen,
den ich dann an die verkettete Liste übergebe.
Da es anscheinend nur möglich ist parametrisierte Typen von diesem Template in
anderen Klassen und Methoden zu verwenden, habe ich die Methoden die mit
Component<T> arbeiten sollen zu template-Funktionen gemacht.
bspl. (ADT Node)class Node{ public: .. template class<T> Node * add(Component<T> *t) = 0; .. }Das scheint der Compiler (gcc) auch zu schlucken, nur leider löst das mein Problem nicht.
Denn der eigentliche Daten-Knoten soll so ein (beliebiges) Template-Objekt aufnehmen könnenclass DataNode : public Node{ .. private: Component<T> *t; }und genau das geht nicht, bei der Variablen muss ich den Parameter angeben.
Meine Frage ist daher, ob der eigeschlagene Lösungweg überhaupt sinnvoll ist
oder was ich ändern sollte.
Ich bin für jeden Hinweis dankbar.Viele Grüsse,
lgn
-
Definiere DataNode auch als Template und lass den Typ angeben, dann kannst du das so machen, denke ich.
rya.
Scorcher24
-
Danke für die Hilfe.
Da alle Knoten (und auch die Liste) mit dem template Component<T> in Kontakt kommen
(auch wenn sie dieses eigentlich nur durchreichen), habe ich vor diese Klassen
template <class T> eingefügt. Da bekomm ich aber viele Compiler-Fehler (parse error
before..etc) die darauf schliessen lassen, das diese Zeile da nicht stehen darf.
Habe ich dich falsch interpretiert oder hast du oder jemand anderes noch eine Idee
wie man das lösen könnte? Ist der Ansatz so ok?Viele Grüsse,
lgn