two in one
-
Hi, ich möchte die Pointer auf Objekte zweier verschiedener Klassen in einen Container schmeißen. (sozusagen [int*, short*, int*, int*, short*,...,short*]) Gibt es da schon eine Klasse die sowas implementiert?
-
Wozu sollte denn das gut sein? Beide Datentypen sind 32 Bit groß. Insofern würde ich int und short einfach nach int casten und gut ist. Kritischer ist es, wenn es unterschiedliche Größen gibt.
Da Du aber sowieso nur Zeiger speicherst, kannst Du dich auch mit einem Zeiger auf ein void behelfen. Allerdings mußt Du dann beim Zugriff wieder entscheiden, ob es nun ein int oder short sein soll. Deshalb würd ich die Daten nur in einem Format speichern. Wenn doch mal ein "short int" kommt, bricht alles zusammen...
-
das mit int und short war ja nur als beispiel gedacht. hätt auch schreiben können [someclass*, someotherclass*]. Gibt es so etwas wie ein void[] ? Allerdings bliebe dann ja immernoch das Problem mit dem Typindikator. Läßt sich das irgendwie umgehen? Vielleicht indem man in den Klassen den Typ mitliefert und beim rausholen aus dem Array abfragt?
-
Du musst für die Klassen eine gemeinsame Basisklasse erstellen, dann geht sowas, ansonsten ist sowas nicht nur unpraktisch zu handhaben sondern auch schlicht schlecht...
Wozu genau brauchst du das denn?
-junix
-
Ich will einen Baum implementieren. Ein Knoten soll Blätter und Knoten gleichzeitig enthalten.
-
Hmmmm Ich schieb das mal nach C++ denn mir scheint, das zieht weitere Kreise als die VCL erlaubt. Grad spontan könnt ich da auch keine elegante Lösung aus dem Ärmel schütteln.
Das Einzige, was mir einfällt wäre das Verwenden lauter Baum-Objekte und ein Baum ohne der keine Unterbäume hat wäre dann ein Blatt...
Ich bin aber sicher einige C++ler wissen da was (o; ->Verschoben
[ Dieser Beitrag wurde am 26.05.2003 um 15:18 Uhr von junix editiert. ]
-
Ein Knoten soll Blätter und Knoten gleichzeitig enthalten.
Ich könnte mir drei Klassen vorstellen:
Du hast eine Basisklasse AbstractNode. Diese stellt das Knoten-Interface zur Verfügung.
Dazu zwei abgeleitete Klassen: LeafNode und InnerNode. Ein InnerNode enthält einen (oder mehrere) Verweise auf AbstractNode.Schau dir dazu auch mal das Composite-Pattern an: http://home.earthlink.net/~huston2/dp/composite.html
http://www.dofactory.com/Patterns/PatternComposite.aspx
-
Das ist es. Danke für die Hilfe.