Header für STL-Container weiterleiten

8

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?

    
fredoverflow 17.11.2010, 18:55
quelle

4 Antworten

1

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.

    
wilhelmtell 17.11.2010, 19:00
quelle
4
  

Gibt es einen solchen Header für die STL-Container?

Nein, ist es nicht.

  

Gibt es Standard, Boost oder andere Lösungen für dieses Problem?

Nicht, dass ich davon weiß.

Sie müssen diese Header einfügen.

    
sbi 17.11.2010 18:58
quelle
0

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> :

%Vor%

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.

    
Kos 17.11.2010 19:35
quelle
-1

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.

    
cababunga 17.11.2010 19:37
quelle