[SOLVED] Template Klassen
-
Hey
habe ich das richtig verstanden, dass man bei Template Klassen die Dateien für die Definition und Deklaration nicht nach dem üblichen .h und .cpp trennen kann, sondern alles in eine Datei gehört? Und die Methoden nach Möglichkeit als inline definiert werden sollten?
Danke im voraus
Nerva
-
Nicht ganz.
Wenn du ein Funktionstemplate oder Klassentemplate nutzen willst, dann muss der Compiler zur Compilezeit (nicht erst beim Linken!) alles darüber wissen.
Gewöhnlich wird das erreicht, wenn du in deiner Headerdatei einfach alles direkt definierst:
// Foo.h template<class T> void foo(T const& x) { std::cout << x; }Dann gibt es noch die logische Trennung, indem die Definitionen in den Header inkludiert werden:
// Foo.impl template<class T> void foo(T const& x) { std::cout << x; } // Foo.h template<class T> void foo(T const& x); include "Foo.impl"Und dann gibt es noch das Schlüsselwort export (?!)...
-
Vorab: Es heißt Klassentemplate, nicht Template Klasse.
sondern alles in eine Datei gehört?
Es muss nicht in eine Datei. Du kannst es auch in zwei Header aufteilen; was aber immer gelten muss ist dass in jeder Übersetzungseinheit (bzw. Source-Datei, .cpp) in der du das Template verwendest die Definition vorhanden ist.
In C++98 wurde ein Schlüsselwort namens
exporteingeführt, welches das von dir angesprochene Aufteilen ermöglichen sollte, jedoch war die Implementierung so kompliziert und zeitaufwendig dass es wieder entfernt wurde und seit C++11 zwar ein reserviertes aber nicht benutztes Schlüsselwort darstellt.Und die Methoden nach Möglichkeit als inline definiert werden sollten?
Nein,
inlineist bei Funktionstemplates überflüssig.
-
Okay Danke
