Klassentemplatefunktionen nicht in .lib zu gebrauchen?
-
Ich bin noch ziemlich unerfahren beim Programmieren mit Templates.
Wenn ich früher gewöhnliche Klassen geschrieben habe, dann sah das meistens so aus, dass ich im Header die Klassendefinition mit den Deklarationen der Memberfunktionen untergebracht habe.
Die Implementierungen der Memberfunktionen schrieb ich dann in separate .cpp Dateien und ließ sie mir von VC++ zu einer statischen Bibliothek zusammenbinden,
mit der ich dann in anderen Projekten arbeiten konnte.Mit Klassentemplates funktioniert das allerdings nicht? Müssen die Funktionsdefinitionen von Memberfunktionen eines Klassentemplates immer in unkompiliertem Zustand vorliegen, damit man sie in seine Projekte einbinden kann?
Wenn ich nämlich nach dem Muster für gewöhnliche Klassen.libs vorgehe, dann meldet der Linker im Falle von in .lib Dateien ausgelagerten Funktionsdefinitionen von Klassentemplates 'unresolved external symbols' für die im Header deklarierten Memberfunktionen des Klassentemplates.Das wäre auch schon die Frage:
Müssen die implementierten Memberfunktionen eines Klassentemplates in Quellcodeform vorliegen, wenn man sie in seinen Projekten einsetzen möchte (im Unterschied zu gewöhnlichen Memberfunktionen einer gewöhnlichen Klasse, die auch in einer .lib zusammengebunden sein dürfen, um zu funktionieren)?
-
Die Antwort auf deine Frage lautet ja.
Der Compiler braucht zur Templateinstanzierung, die komplette Definition.