Vorwärtsdeklaration in separater Header-Datei



  • Hallo zusammen,

    ich arbeite an einer umfangreichen C++-Projektmappe mit mehreren Projekten. Zur Zeit versuche ich, Include-Verweise duch Vorwärtsdeklarationen zu ersetzen. Dabei ist mir aufgefallen, dass ich immer wieder die selben Klassen vorwärts deklariere und somit redundanten Code schreibe. Eine Lösung für dieses Problem wäre, alle Vorwärtsdeklarationen für ein Projekt in eine eigene Header-Datei zu packen und diese dann von den einzelnen Stellen aus zu per #include zu referenzieren. Frage an die C++-Experten hier: Spricht da irgendwas dagegen?

    Vielen Dank im Voraus...



  • Das kann bei immer wieder verwendeten Klassen durchaus sinnvoll sein. Die Standardbibliothek hat auch einzelne Header wie <iosfwd> , die primär Vorwärtsdeklarationen enthalten.

    Solange in dieser Datei nicht selbst wieder #include -Statements stehen, wird auch die Kompilierzeit kaum erhöht, wenn sie an vielen Orten eingebunden wird.



  • Nexus schrieb:

    Das kann bei immer wieder verwendeten Klassen durchaus sinnvoll sein. Die Standardbibliothek hat auch einzelne Header wie <iosfwd> , die primär Vorwärtsdeklarationen enthalten.

    Okay, vielen Dank für die schnelle Antwort. Ich werde es mal auf diese Weise versuchen...



  • Was auch immer eine C++-Projektmappe ist, halte ich die Vorgehensweise für nicht sinnvoll. Sobald Du eine neue Klasse irgendwo einfügst, musst Du die komplette Projektmappe neu compilieren, da die zentrale Vorwärtsdeklarationsheaderdatei (guter Fachbegiff gell? 🤡 ) geändert hast. Das versteht man eher nicht unter unabhängige Komponenten.



  • Guter Punkt, neben dem Hinzufügen neuer Klassen spielt auch das Umbenennen/Löschen eine Rolle. Ein Vorwärtsdeklarationsheader lohnt sich also höchstens für sehr zentrale/sich selten ändernde Klassen. Zum Beispiel für Klassen einer externen Bibliothek.

    Noch ein Vorteil, wenn du die Vorwärtsdeklarationen erst aufschreibst, wo sie benötigt werden: Du siehst gleich die Abhängigkeiten einer Klasse.


Log in to reply