Muss eine Template-Klasse komplett in eine Datei
-
Huhu,
ich habe gesucht und einiges zu diesem Thema gefunden, aber das Gefundene hat mich noch mehr verwirrt. Verzeiht mir daher diese Frage. Habe ich es nun richtig verstanden, dass eine Template-Klasse komplett in einer Datei stehen muss? Sprich, dass eine Aufteilung in *.h die Deklaration, *.cpp für die Methoden-Definitionen nicht möglich ist? Logisch wäre es ja, da die Klasse erst generiert werden muss. Ausgeprobiert hab ich es auch mit dem gcc. Bei einer Aufteilung in *.h und *.cpp hat er nicht kompiliert. Packte ich alles in die *.Datei ging es.
Hab ich das ganze nun richtig verstanden? Danke.
Grüße jimbeam
-
jo
-
Es muss nicht unbedingt in einer einzigen .h-Datei stehen, es können auch mehrere sein. Aber prinzipiell liegst du richtig.
-
Es war ursprünglich mal ein export-Schlüsselwort im Standard vorgesehen, mit dem eine Aufsplittung möglich sein sollte, aber die Realisierung scheint technisch nur schwer realisierbar zu sein, zumindest hat meines Wissens nach kein Compiler bis zum heutigen Tag eine export-Unterstützung (bis auf Comeau vielleicht?).
Wenn die Aufteilung nur der besseren Übersicht dienen soll, kann man sich aber dadurch behelfen, dass man Dateien am Ende des Headers inlined.
// X.hpp #ifndef X_HPP #define X_HPP template<typename T> class X { void foo(); ... }; #include "X.nl" #endif
// X.inl #ifndef X_INL #define X_INL template<typename T> void X<T>::foo() {...} ... #endif
-
Huhu nochmal,
dankeschön für die Antworten. Dann weiss ich vorerstmal Bescheid. Habe hier einiges an C++-Literatur. Wird aber nirgends so genau erklärt.
Grüsse jimbeam
-
Wann glaubt ihr, werden die ersten kompiler (vor allem gcc) export unterstützen?
-
Niemand braucht die Funktionalität von export.
-
ness schrieb:
Wann glaubt ihr, werden die ersten kompiler (vor allem gcc) export unterstützen?
Comeau unterstützt es bereits und der gcc wird es (wenn man der Mailingliste glauben darf) wohl in ferner Zukunft nicht unterstützen, weil es fast ein Projekt für sich wäre das einzubauen.
-
export-hasser schrieb:
Niemand braucht die Funktionalität von export.
Ich hätte sie gerne gehabt :p
-
Nur der Comeau unterstützt export (bis jetzt) (http://www.comeaucomputing.com/)
Core C++03 language enhancements for all major and minor features of C++ and C, including export
Felix