Templates: Source inkludieren
-
Hi
Ich weiß, dass man bei Templates nicht so einfach die Implementierung in eine andere Datei schreiben kann. Nun habe ich sie bisher einfach in den Header geschrieben.
Dass man sie unten drunter inkludiert kann ich ja auch noch verstehen.
Aber ich habe hier gelesen, dass die Dateien die man inkludiert cpp Dateien sind oder sein können.
Die Frage an euch: wieso? Warum cpp Dateien und wieso funktioniert das da auf einmal?
-
inkludieren kannst du in der regel alles, was du willst, solange der compiler den inhalt verarbeiten kann.
das problem ist nur oft, dass wenn du in einer IDE eine .cpp/.cc datei deinem projekt hinzufügst, diese dem compiler als eigene übersetzungseinheit präsentiert wird. eine inklusion einer datei, die eine übersetzungseinheit darstellt, in einer anderen übersetzungseinheit wird in der regel zur verletzung der one-definition-rule (ODR) führen. bei templates ist die ODR normalerweise nicht so strengt, aber man kann sich leicht szenarien vorstellen, wo beispielsweise das hinzufügen einer expliziten spezialisierung in der implementierungsdatei (die eine eigene ÜE ist) zu einem fehler führt.
abgesehen davon müsstest du dann wohl in deiner implementierungsdatei include-guards einfügen.für template-definitionen hat sich daher eingebürgert, die dateiendung *.inl oder *.impl zu verwenden.