Templates: *.h und *.cpp trennen
-
Hallo,
ich suche nach einer Lösung wie ich templates in einer Klasse verwenden kann, die auf mehrere Dateien (*.h und *.cpp) aufgeteilt ist. Es sollen dabei Methoden als Rückgabewert dieses Template haben, und überschrieben werden.
Allerdings habe ich gehört, dass das schwierig ist. Ist das möglich?!
-
Ich versteh nicht ganz, was du machen willst. Aber solange du nicht gerade den Comeau-Compiler benutzt (und damit auf export zurückgreifen kannst), vergiß es. (Nichtexportierte) Template-Definitionen müssen an der Instanziierungsstelle sichtbar sein.
-
Solange die meisten Compiler export nicht können, kann man sich eines netten Tricks bedienen. Und zwar:
// test.hh #ifndef INCLUDED_TEST_HH #define INCLUDED_TEST_HH template <typename t> struct test { t foo(); }; #include "test.tcc" #endif //test.tcc template <typename t> t test<t>::foo() { return t(); }
-
Bashar schrieb:
Ich versteh nicht ganz, was du machen willst. Aber solange du nicht gerade den Comeau-Compiler benutzt (und damit auf export zurückgreifen kannst), vergiß es. (Nichtexportierte) Template-Definitionen müssen an der Instanziierungsstelle sichtbar sein.
und somit is das ganze nur durch sowas dummes wie das hier möglich:
//code.h template<class T> class foo{ public: void bar(); template<class U> foo<U> foobar(foo<U>); }; #include "code.cpp" //code.cpp template<class T> void foo<T>::bar(){} //jetzt wirds richtig intressant: template<class T> template<class U> foo<U> foo<T>::foobar(foo<U> x){} //muhahah :D
noch krasser wird das ganze mit namespaces und/oder nested classes, aber des lass ich mal
-
hmmm ist das jetzt absicht mit dem tcc? muss ich das format kennen?
-
Die Erweiterung einer include Datei spielt gar keine Rolle.