Apuch - Fr 30.10.09 16:43
Titel: Klassen-Prototypen in Delphi
Hallo,
hab ein kleines Problem mit der Delphi-Syntax.. gibt es in Delphi so etwas wie Vorwärtsdeklarationen von Klassen und Interfaces? Konkretes Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ISceneObject = interface(IInterface) function Draw(scene : TScene) : Boolean; end;
TScene = class(TObject) public procedure Add(obj : ISceneObject); end; |
Das ISceneObject braucht eine Typdefinition von TScene und anders herum. Es handelt sich also um eine einfache Mutter-Kind-Beziehung, wobei beide Klassen voneinander wissen. Ein ISceneObject kann dabei mehreren TScenes zugeordnet sein.
In C++ war es eine einfache Vorwärtsdeklaration (d.h. eine kurze Ankündigung, das irgendwann eine Klasse XYZ auftaucht). In Delphi ist dies anscheinend nicht möglich. Stellt sich natürlich die Frage: Wieso????
Was ist ein halbwegs eleganter Workaround?
- Mit TObject bzw. Pointern arbeiten? -> Typencheck durch Compiler ausgehebelt/ Lesbarkeit drastisch verringert
- Gemeinsame Basisklasse? -> Es sind keine gemeinsamen Basistypen und es währe möglich, ein TScene als SceneObject unterzujubeln
- Separate Liste (TSceneObjectList) in einer separaten Unit -> Dreiecksbeziehung/ auch nicht wirklich elegant. Und der Softwareentwurf wird der Sprache angepasst -> ganz schlechtes Zeichen
btw: Gibt es in Delphi7 irgend etwas vergleichbares zu C++-Templates? Mich stören die ganzen Casts in meinem Code:?
MfG
Apuch - Fr 30.10.09 17:34
grmpf..
Hatte es natürlich selbst schon probiert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TScene = class(TObject); ISceneObject = interface(IInterface) function Draw(scene : TScene) : Boolean; end;
TScene = class(TObject) end;
TScene = class; ISceneObject = interface(IInterface) function Draw(scene : TScene) : Boolean; end;
TScene = class(TObject) end; |
Ersteres war natürlich meine Variante :? Bei google hab ich auch Threads in anderen Foren gefunden, die genau das selbe behaupteten (zB
hier [
http://entwickler-forum.de/showthread.php?t=28036]. Bin halt neu in Delphi und noch nicht wirklich überzeugt ;)
Danke für die Schnelle Antwort
MfG