[SOLVED] Template Trennung Header/Source
-
angenommen, ich habe in einem Header folgende Template Klasse definiert:
template<class T> class Auto { public: hierganzvieleunwichtigeAttributeinabhängigkeitvon T; fahreTemplateAuto(); // nur deklaration, nicht definition! };jetzt meine Frage:
Was ist die Syntax, um dann in der .cpp-implementierung die Methode fahreTemplateAuto() zu definieren?
Muss ich dort auch nochmal template<class T> dazuschreiben? wie muss ich das machen?
-
Was benutzt Du für ein Kompiler?
-
eigentlich gibt es noch keine vernünftige möglichkeit das hinzubekommen
ich mache es immer so :
die cpp mit include guards ausstatten,
dann in der cpp
template <class T> auto<T>::fahreTemplateAuto() { }in in der hpp, die cpp includieren
-
Heinzelotto schrieb:
jetzt meine Frage:
Was ist die Syntax, um dann in der .cpp-implementierung die Methode fahreTemplateAuto() zu definieren?
Muss ich dort auch nochmal template<class T> dazuschreiben? wie muss ich das machen?1. Funktioniert die Trennung Header/Source bei Templates nicht so wie du es von anderen Klassen gewohnt bist. Du kannts bei Templates nur einen der folgenden Ansätze wählen:
a) Dein Compiler gehört zu denen die das export-Schlüsselwort für Templates unterstützen (Dies ist derzeit wohl bei 2 der Fall, mir ist aber selbst nur der Comeau Compiler bekannt).
b) Du trennst wie gewohnt, inkludierts am Ende des Headers aber den Source! (Bitte dann die Ändung auch nicht cpp nennen, sondern besser tmpl oder ähnliches).
c) [Standardweg] Du machst alles in einen Header.2. Wie man die Definition schreiben muss, wenn man sie nicht inline definiert:
template<class T> class Auto { public: hierganzvieleunwichtigeAttributeinabhängigkeitvon T; void fahreTemplateAuto(); // nur deklaration, nicht definition! }; template<class T> void Auto<T>::fahreTemplateAuto() { }cu André
P.S: Rückgabewerte haben Methoden/Funktionen weiterhin... (Ein Compiler der default-int annimmt hält sich nicht an den Standard)
-
template<class T> void Auto<T>::fahreTemplateAuto() { }so hatte ich es tatsächlich auch gemacht, aber da ich weder "extern" verwendet, noch die .cpp datei im header inkludiert habe, hat es zwar kompiliert, die methode in der klasse war aber immernoch undefiniert.
Vielen Dank für eure Antworten, ich werde jetzt aber mal schauen, ob ich vielleicht der Einfachheit halber doch alles in den Header schreiben kann, wenn es zu viel werden sollte, werde ich eine der beschriebenen Möglichkeiten benutzen.
Vielen Dank!