template definitionen
-
Hallo,
eine kurze Frage, die sicherlich schnell zu beantworten ist. Wenn man eine Template-Klasse erstellt, muss man ja in der Header-Datei die entsprechende .cpp Dateien am Ende mit einfügen (#include "*.cpp").
Wenn ich jetzt keine Template-Klasse, sondern nur eine Template-Methode habe muss ich dann nur die Definition der Methode am Ende einfügen oder auch wieder die kompletten Definitionen?
Danke schonmal im Voraus
Grüße
-
Also ich lege templates eigentlich immer so an:
// .h template<typename T> class XYZ { private: T x; public: T foo(/***/) { /* * */ } }; template<typename T> T foo(/***/) { /* * */ }oder ohne inline Definition:
// .cpp #include "*.h" template<typename T> T XYZ::foo(/***/) { /* * */ } template<typename T> // im Header dann mir extern T foo(/***/) { /* * */ }
-
Du mußt nur den Code der Template-Methode in der Headerdatei haben (bzw. in der von dort eingebundenen). Die restlichen (nicht-template) Methoden kannst du normal in die .cpp packen.
Es geht ja nur darum, daß der Code der Template-Methoden/Funktionen zum Kompilieren zur Verfügung steht, alle anderen Methoden/Funktionen werden ja normal erst vom Linker zusammengebunden.
-
wäre es falsch die nicht-template-methoden auch mit einzubinden? also wenn ich alle definitionen in eine .cpp packe und dann mit #include am ende der header mit einbinde, oder sollte ich lieber template und nicht-template trennen?
ich möchte in jedemfall der übersicht halber definition und deklaration in separaten dateien haben.
-
Ja, das wäre falsch, weil du dann die ODR (one definition rule) verletzen würdest (sobald die Headerdatei in mehreren Übersetzungseinheiten eingebunden werden würde).
-
jo, danke, hab ich auch gerade festgestellt. ich habs über präprozessorbefehle lösen können.