![]() |
Verkette Liste mit unbekannten Objekten?
Tag,
ich habe vor eine klasse(in einer extra unit) zu schreiben (TLinkedList)... ich möchte dann eine instanz dieser klasse erzeugen und dabei die klasse um die sich die liste handelt übergeben...wie geht das? geht das überhaupt? also sowas wie:
Delphi-Quellcode:
?
PLinkedList = ^TUnbekanntesObjekt
var1: string; var2: string; var3: string; end; |
Re: Verkette Liste mit unbekannten Objekten?
Hallo,
es hört sich so an als ob das Gespann TCollection/TCollectionItem erfinden möchtest. |
Re: Verkette Liste mit unbekannten Objekten?
Zitat:
|
Re: Verkette Liste mit unbekannten Objekten?
ja tut es, und da ich meine dynamischen arrays gerade durch verkettete listen ersetze...
das problem ist das ich für jeden record(geht das gleiche überhaupt mit klassen?) eine neue klasse schreiben muss, weil das item der verketteten liste jedes mal ein anderes ist |
Re: Verkette Liste mit unbekannten Objekten?
Hallo,
ich glaube polymorphe Funktionen gehen mit Delphi nicht. Wozu brauchst du das aber überhaupt, die TLinkedList soll ja nichts mit den gespeicherten Daten anfangen? Dann nimm doch einen allgemeineren Typen, also z.B. ein TObject wenn nur Klassen zugelassen werden sollen oder einfach nur ein Pointer. |
Re: Verkette Liste mit unbekannten Objekten?
Zitat:
|
Re: Verkette Liste mit unbekannten Objekten?
irgendwie krieg ich den dreh nicht raus wie ich VERSCHIEDENE objekte in so eine liste bekomme.
wenn es um eine liste EINES typs ging hab ich das immer so gemacht:
Delphi-Quellcode:
PMyList = ^TMyList;
TMyList = record blah1: string; end; nur was nehme ich statt ^TMyList wenn ich eben verschiedene objekte übergeben möchte? |
Re: Verkette Liste mit unbekannten Objekten?
Wenn du es objektorientiert machst, dann brauchst du einfach eine Basisklasse, von der alle anderen Klassen abgeleitet sind.
Ein kleines Beispiel: Du willst Daten über CD/DVDs verschiendener Arten (Musik, Video, Bilder) speichern:
Delphi-Quellcode:
type
TListEntry = class end; TListNode = class private Data: TListEntry; Next: TListNode; end; TAudioDisc = class(TListEntry) //hier Klassen-Interface end; TVideoDisc = class(TListEntry) //hier Klassen-Interface end; TImageDisc= class(TListEntry) //hier Klassen-Interface end; var ln: TListNode; begin //... ln.Data := TImageDisc.Create; Nun kannst du alles, was vn TListEntry abgeleitet ist, dranhängen. |
Re: Verkette Liste mit unbekannten Objekten?
moin chewie,
danke für dein beispiel, wenn folgendes nicht möglich ist werd ich es so machen ;) eigentlich habe ich mir das so gedacht, das ich die klasse TLinkedList einmal(!) schreibe und dann niemehr was daran aendern muss, d.h ich kann sie immer in meinen programmen verwenden, egal für welche objekte... ich dachte mir das dann ca so in meinem hauptprogramm:
Delphi-Quellcode:
type
TForm1 = class(TForm) private MyList: TLinkedList // meine klasse public procedure irgendeineprozedur; end; ... procedure TForm1.irgendeineprozedur; begin MyList.AddItem(instanzIRGENDEINERklasse); //additem = methode von TLinkedList end; weisst wie ich meine? |
Re: Verkette Liste mit unbekannten Objekten?
OK, wenn du das mit Records machen willst geht das auch. Du musst dann deine "Nutzlast" als Zeiger auf ein Record definieren. Entweder untypisiert oder, analog zu der OOP-Variante, einen Record mit varablem Anteil anlegen.
Ich würde dir aber schwer zu der OOP-Variante raten. Dort sparst du dir u.U. die ewigen Typabfragen, indem du ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz