Template - Organisation des Quellcodes
-
Diese Woche habe ich mich mit Templates im Selbststudium befasst.
Grosses Fragezeichen bezüglich Organisation des Quellcodes: in einem Tutorial fand ich
"The macro-like functionality of templates, forces a restriction for multi-file projects: the implementation (definition) of a template class or function must be in the same file as the declaration."
Andererseits widmet Stroustrup (die c++ programmiersprache) ein eigenes kapitel: 17.3 um Headerfile und Code zu trennen.
Ersteres funktioniert, zweiteres nicht. Gibt es einen Tip dazu?
lg sabine
-
wenn du ein Template schreibst, dann mußt du die Implementation der Methoden, welche du eigentlich in die .cpp schreiben würdest, mit in die .h aufnehmen
[edit]sorry
-
Dennoch gibt es verschiedene Modelle nach denen man seine Sourcen organisieren kann.
Man kann alle Definitionen in den Header schreiben, oder die Definitionen in eine andere Datei (z.B. .inl) und die dann in den Header einbinden. Das erleichtert unter umständen mal irgendwann auf export umzusteigen.
Außerdem kann man auch nur mit dem Header arbeiten, dann muß man aber irgendeiner ÜE die nötigen Instanziierungen von Hand vornehmen. Das kann dafür aber u.U. einiges an Compilezeit sparen.
MfG Jester
-
freshman schrieb:
wenn du ein Template schreibst, dann mußt du tatsächlich den Inhalt, welchen du eigentlich in die Headerdatei schreiben würdest, mit in der .cpp aufnehmen
geht nicht andersVölliger Quark.
-
Bashar schrieb:
freshman schrieb:
wenn du ein Template schreibst, dann mußt du tatsächlich den Inhalt, welchen du eigentlich in die Headerdatei schreiben würdest, mit in der .cpp aufnehmen
geht nicht andersVölliger Quark.
Warum sagst du nicht schlicht und einfach "Andersrum"?
Völliger Quark ist es trotzdem nicht, wenn das Programm nur aus einer ÜE besteht.
-
Allerdings braucht man für eine Quelldatei auch keine Headerdatei, mein Fehler.
-
Fakt ist, das auch bei Templates die Trennung Header und Implementierung gehandhabt werden sollte, so wie es auch Bjarne Stroustrup empfiehlt. Und EIGENTLICH ist das das auch bei Templates möglich!
Eigentlich? Ja, denn leider unterstützt kein Compiler bisher dieses Feature, obwohl es im ISO C++ Standard drin steht. Um Templates in Header und Implementierung zu trennen, gibt es das Schlüsselwort "export". Kann aber bisher keiner.
Microsoft z.B. sagt in etwa: "erst auf Kundenwunsch werden wir dieses Feature implementieren."
Scheint auch eine etwas kompliziertere Sache zu sein...
Bei Nicht-Templates sollte man die Trennung aber auf jeden Fall einsetzen.
-
Artchi schrieb:
Scheint auch eine etwas kompliziertere Sache zu sein...
Ist auf jeden Fall ein größerer Umbau, denn sonst würden sich die Leute vom gcc nicht so lange zieren das Feature einzubauen.
-
Artchi schrieb:
Fakt ist, das auch bei Templates die Trennung Header und Implementierung gehandhabt werden sollte, so wie es auch Bjarne Stroustrup empfiehlt. Und EIGENTLICH ist das das auch bei Templates möglich!
Eigentlich? Ja, denn leider unterstützt kein Compiler bisher dieses Feature, obwohl es im ISO C++ Standard drin steht. Um Templates in Header und Implementierung zu trennen, gibt es das Schlüsselwort "export". Kann aber bisher keiner.
Ganz so einfach ist es nun auch nicht. Der Standard ist kein göttliches Gesetz, im Standardkommitee sitzen u.a. auch Compilerhersteller, also genau die Leute, die es jetzt nicht schaffen, export zu implementieren. Normalerweise wird ein Feature erst von einem entwickelt und getestet, und dann wird darüber entschieden, ob und wie es standardisiert werden soll (siehe z.b. den Werdegang der STL). Bei export ist das nicht geschehen, da hat man sich am Reißbrett was ausgedacht und irgendwie definiert, was letztlich nicht bzw. nur mit sehr sehr hohem Aufwand machbar war. Und schon seit einiger Zeit hat sich herausgestellt, dass export auch theoretisch nicht der große Wurf war (siehe Herb Sutters Artikel "Export Restrictions" Teil 1 und 2).