Forward-Deklaration auf Nested Classes
-
Hi,
ich versuche gerade, eine Forward-Deklaration auf eine Nested Class hinzubekommen, irgendwie will es aber nicht klappen.
Beispiel:
// a.h .. class A { public: class AA { ... }; };// b.h // a.h hier nicht inkludieren, da viel zu großer Header void f( A::AA* a);Da in b.h nur ein Pointer auf A::AA verwendet wird, sollte A::AA ja nicht bekannt sein müssen. Wie schreibe ich jetzt aber eine gültige Forward-Deklaration hin? Falls das überhaupt möglich ist?
-
Hallo,
das ist leider nicht möglich. Um eine nested Class zu deklarieren brauchst du die vollständige Definition der umschließenden Klasse.
-
Danke für die Antwort. Das habe ich schon befürchtet.
Vielleicht ziehe ich dann die Nested Class aus der Klasse raus.
-
Hm, wäre es eine lösung die Nested Class von einer Basisklasse
abzuleiten, welche ausserhalb der Klasse liegt ?
Dann könnte man evtl. einfach einen Pointer der Basisklasse verwenden.
-
Danach bräuchstest Du aber einen Downcast in die Nested-Class, oder müsstest die Funktionalität eh schon in die Basisklasse einziehen. Von daher hat man da auch nicht so viel gewonnen.
Hab zumindest bei mir jetzt die Nested Class rausgeschmissen und gut ist

-
7H3 N4C3R schrieb:
Danach bräuchstest Du aber einen Downcast in die Nested-Class, oder müsstest die Funktionalität eh schon in die Basisklasse einziehen. Von daher hat man da auch nicht so viel gewonnen.
Hab zumindest bei mir jetzt die Nested Class rausgeschmissen und gut ist

Klar, aber du könntest sie auch nur als Proxy nutzen, und
virtuelle Methoden zum weiterleiten nutzen. Die basis kann
ja pure virtual sein.
-
Naja, das wäre zumindest für mich zuviel Aufwand und ein unnötiger Overhead durch virtual (für eine Mini-Klasse, die im wesentlichen zur Datenhaltung dient).
Einen ähnlichen Effekt könnte man vielleicht noch bekommen, indem man einen namespace definiert:
// a.h namespace A2 { class AA { }; } // b.h namespace A2 { class AA; } void f( A2::AA*);Dann wäre die Forward-Deklaration legal und es hätte zumindest den Effekt, dass die Klasse nicht sofort aus dem Header "leakt" und nur bei Bedarf mit A2:: oder using A2 sichtbar gemacht wird.
Wenn ich mich recht entsinne, wurden mit dem umkehrten Weg namespaces simuliert, als es noch keine gab / schlecht unterstützt wurden
