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