Der Header <iostream>
hat einen Begleiter <iosfwd>
, der ausreicht, wenn ich nur Zeiger oder Referenzen auf Streams benötige. Letzteres ist ein häufiges Szenario beim Überladen von operator<<
.
Gibt es einen solchen Header für die STL-Container? Ich möchte einige Funktionen definieren, die auf STL-Container verweisen, und ich möchte nicht <vector>
, <list>
, <set>
et enthalten. al. in ihrer Gesamtheit, nur damit ich auf diese Typen verweisen kann. Gibt es Standard, Boost oder andere Lösungen für dieses Problem?
Nein, leider nicht. Der Standard führte <iosfwd>
nur aus Gründen der Abwärtskompatibilität ein, um den Code zu unterstützen, der für die alte, nicht mit Vorlagen versehene IO-Streams-Bibliothek geschrieben wurde.
Warum sollte es eigentlich nicht möglich sein, eine Template-Klasse-Forward-Deklaration zu haben?
Wenn Sie dringend einen Workaround benötigen, könnten Sie in etwa so vorgehen:
%Vor%Fügen Sie einen Include-Wächter hinzu, speichern Sie ihn als "stdfwd.h" oder etwas, und schon können Sie loslegen.
Dann funktioniert so etwas ohne <vector>
:
Arbeitete für mich mit GCC 4.5. Ich habe im Moment keine Ahnung, wie man eine transparente Problemumgehung für das Problem schaffen kann, dass man nicht gleichzeitig ein Standardargument (auch Template-Argument) in Deklaration und Definition haben kann, das .. Aber es könnte möglich sein - vielleicht könnte irgendjemand übernehmen von hier aus? :) Ich würde es nicht im Produktionscode verwenden, denke ich, aber sieht wie eine interessante Übung aus.
Mit iosfwd ist es möglich zu tun, weil es nur zwei Typen gibt, für die die Vorlagen instanziiert werden müssen: char und wchar_t. Was Sie am Ende bekommen, sind Vorwärtsdeklarationen des instanziierten Betontyps. STL-Container dagegen sollen mit jedem Typ arbeiten, also gibt es in STL-Headern keine expliziten Angaben.
Tags und Links c++ header-files stl forward-declaration