KlassenTemplate-Funktion Implementieren

Tja...

Da hab ich mich wohl zu früh gefreut. Die Fehlermeldungen bekomme ich zwar nicht, aber dafür funktioniert meine "Lösung" nicht wirklich:
Damit kann man als "size_type" nur "int" verwenden - wahrscheinlich ist "typename" im C-Source von C++ als 'int' deklariert oder wasweissich.
Naja, da muss ich wohl vorerst eine der beiden anderen Varianten nutzen.

Vielleicht stößt einer auf eine andere Lösung - bis dahin...

Gruß
Enum
 
Nach intensivem Googeln muss ich enttäuscht feststellen, das es wirklich keine universelle Möglichkeit zur Implementierung von Template-Klassen-Membern, welche in einer Header definiert wurden, in CPP-Dateien zu geben scheint.
Auch hier im Forum ist das Thema schon einmal in ähnlicher Form behandelt worden ...

Naja, für meine Zwecke sieht die Lösung jetzt so aus:
Ich Implementiere dennoch Header-extern, linke aber eine zusätzliche Header in die CPP-Datei mit ein, in welcher nichts weiter als mehrere solcher Zeilen stehen:

Code:
template class cBeispiel<X>;

... X steht hier für einen Typ, der nur in dem aktuellen Projekt verwendet wird. So habe ich meinen Dickschädel und ein Bisschen Flexibilität gewahrt.

Gruß
Enum
 
Zuletzt bearbeitet:
Hi.
Was allerdings auch zu klappen scheint: in die Datei mit der Implementation der Klassenmethoden beispielsweise Folgendes einfügen:
Code:
template class cBeispiel<unsigned int>;
Ich bin allerdings überfragt, warum das auch funktioniert ;) Vielleicht kann da ein Profi mehr dazu sagen.
Bis heute gibt es nur einen C++ Compiler der den kompletten C++ Standard (inklusive dem export Schlüsselwort für Templates) unterstützt - Comeau C/C++. Bei allen anderen Compilern muß der Template Code während des Kompilierens verfügbar sein - entweder direkt in der Header-Datei oder (wie meistens üblich) in einer separaten Datei die dann vom Header aus include'd wird.

Anders sieht es aus, wenn man den Compiler den Code für alle möglichen Instanzierungen des Templates schonmal "vorab" generieren läßt. Das wird mit dem obigen Code eben getan. Der vorbereitete Code ist dann in der DLL verfügbar und kann (wenn nötig) benutzt werden. Das bläht natürlich die DLL auf und ist nur für die vorbereiteten Fälle nutzbar - was dem Sinn der Templates ja im Grunde widerspricht.

Im OpenSource Bereich ist es üblich den Template Code für die Funktionen einfach mitzuliefern. Siehe z.B. Boost

Gruß
 
Zurück