C++ Templates .cpp/.h

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Xethoras
Beiträge: 36
Registriert: 05.03.2008, 21:56

C++ Templates .cpp/.h

Beitrag von Xethoras »

So... Nach min. 2 Stunden Fehlersuche hab ich herausgefunden, dass Templates in C++ nicht in zwei Dateien gesplittet werden können, wie andere Klassen. Schade eigentlich. Nun wüsste ich gerne warum das so ist^^
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: C++ Templates .cpp/.h

Beitrag von Aramis »

Weil die Templates bei Verwendung vom Compiler instanziert werden müssen. Und dazu müssen alle instanzierenden Units Zugriff auf die vollständige Implementierung des Templates haben, die sich dann idealerweise im Header befindet.
Xethoras
Beiträge: 36
Registriert: 05.03.2008, 21:56

Re: C++ Templates .cpp/.h

Beitrag von Xethoras »

Versteh ich jetzt zwar zugegebenermaßen nicht ganz, aber trotzdem danke für die Antwort^^
Benutzeravatar
Schrompf
Moderator
Beiträge: 4852
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: C++ Templates .cpp/.h

Beitrag von Schrompf »

Was Aramis damit meint, ist: an der Stelle, an der Du das Template mit konkreten Parametern benutzt (sprich "instanziierst"), muss dem Compiler die komplette Implementation bekannt sein. Also nicht nur die Deklaration, also die Schnittstelle, wie sie üblicherweise in Headern steht, sondern auch die ganze Implementation, die man bei normalen Klassen ja in die .cpp-Datei schreibt.

Deine Optionen:

a) Implementier alles im Header
b) Implementier es in der separaten CPP-Datei und inkludiere die mit dazu.
c) Schreib die Implementation in eine eigene Datei... bei mir heißen die z.B. bla.inl (für inline)

Läuft alles auf's selbe hinaus: Du inkludierst die komplette Implementation, nicht nur die Deklaration.

Bye, Thomas
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Xethoras
Beiträge: 36
Registriert: 05.03.2008, 21:56

Re: C++ Templates .cpp/.h

Beitrag von Xethoras »

Ok, mir bleibt wohl nix anderes übrig, als es zu aktzeptieren^^
hab alles in eine Datei gesteckt... am unkompliziertesten^^
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 15:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: C++ Templates .cpp/.h

Beitrag von dowhilefor »

Das mit *.inl ist gängige Praxis.
Was dir bestimmt daran nicht gefällt ist, das Leute genau deine Implementierung sehen können, wenn du bspw. deine Lib weitergibst. Guck dir mal boost oder die STL an und du wirst sehen, das Problem hast nicht nur du nur ... es macht nichts :)
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Antworten