Templates => Header und Source kapselung
-
Hallo Leute,
ich hab heute ne kleine Template Klasse implementiert! Und wie es sich gehört , den Deklarationteil in die Header gepackt, und die implementierung in die CPP!
Aber bei Template ging das nich ohne weiteres, wenn ich eine instanz erzeugen will, und musst auf folgenden Workarround:
http://www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp
d.h. ich muss da wo ich das template verwende die header und die source datei includieren, damit es keine linker fehler gibt!?
Finde das alles etwas unschön
Bin verwöhnt von c# und generics:pWie macht ihr das ? Wie geht ihr mit dem Problem ums?`
Danke und Grüße
-
NullBockException schrieb:
Wie macht ihr das ? Wie geht ihr mit dem Problem ums?
Ich schreibe alles im Header.
-
ohhh.. hätte nich gedacht, dass es hier wohl keine bet. konvetionen für diesen fall gibt.. hmm dann mach ich wohl auch alles in den header...
-
NullBockException schrieb:
d.h. ich muss da wo ich das template verwende die header und die source datei includieren, damit es keine linker fehler gibt!?
Nö.Die gängigen Konventionen sind wohl:
- Alles im Header
- Der Header inkludiert am Ende die .cpp oder .impl Datei
Der Client sollte da wie gewohnt nur den Header inkludieren.
-
Mach dir folgendes klar:
Template-Code ist ja nicht wirklich "da". Im Gegensatz zu normalen cpp-Dateien, aus denen der Compiler dann verlinkbare Objektdateien baut, sind Templates nur "Anleitungen", wie andere daraus ihren Code bauen können.
Wenn du also eine tolle Template-Klasse
template <class T> class Garage { ... };geschrieben hast, interessiert das zunächst mal niemand.
Erst in deiner Client-Anwendungs-cpp, wo es dann heißt:
class RaceCar; ... Garage<RaceCar> myGarage;wird anhand des Templates der tatsächliche Code gebaut (compiliert)