006
20.01.2009, 00:59 Uhr
0xdeadbeef
Gott (Operator)
|
Templates (Vorlagen) müssen dem Compiler vollständig bekannt sein, damit er sie konkretisieren kann. Templates sind keine Klassen oder Funktionen, die gelinkt werden könnten, sondern Baupläne für Klassen oder Funktionen - Vorlagen, halt.
Das hat zur Folge, dass Templates üblicherweise vollständig in den Header gehen. Mit expliziter Konkretisierung kann man Templates für ausgesuchte Fälle linken, weil sie dann quasi schon vorkonkretisiert sind, aber um den generischen Charakter vollständig zu erhalten, muss der Compiler die komplette Definition kennen. Das .hpp/.cpp-System wird damit keinesfalls sinnlos, aber Templates bilden nunmal keine eigene Übersetzungseinheit.
Manchmal findet man "aufgetrennte" Templates in der Form, dass der Header ein #include auf die Methodenvorlagendefinitionen hat; GNUs libstdc++ zum Beispiel trennt sie auf in .h und .tcc, wobei die .h dann am Ende ein #include "foo.tcc" hat. Nichtsdestoweniger müssen die Definitionen aber zur Compilezeit vorhanden und eingebunden sein. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |