Multiple Source Files: Templates
-
theliquidwave schrieb:
Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein. Wenn du dich etwas einliest, weißt du auch, warum das so ist.
Das ist auch in C++11 nicht anders.
-
theliquidwave schrieb:
Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein.
meinst du damit export oder ist das generell in C++11 so?
-
Skym0sh0 schrieb:
theliquidwave schrieb:
Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein.
meinst du damit export oder ist das generell in C++11 so?
Ich denke er meint export, sonst ist in C++11 da auch nichts anders
-
OK, muss also alles in den Header rein...
-
Im Gegenteil, mit export wäre das vor C++ 11 zumindest theoretisch möglich gewesen (allerdings hat das praktisch kein Compiler jemals unterstützt). Da export mit C++ 11 abgeschafft wurde, geht es nun gar nicht mehr.
cppler schrieb:
OK, muss also alles in den Header rein...
ja
-
Naja es ginge mit extern, oder?
Allerdings auch nur wenn man alle Typen kennt mit denen das Template instanziert wird.EDIT: OK, extern braucht man gar nicht unbedingt, aber halt ne explizite Instanzierung in irgendeiner TU /EDIT
-
Naja, mit extern kann man aber, wie du selbst schon sagst, nur eine explizite Instanz eines template deklarieren. Du kannst nicht das template an sich irgendwo separat definieren.
-
@ccpler:
Mit einem kleinen Trick kannst du dir sogar die Übergabe der Größe sparen:template<typename T, int SIZE> bool print(T (&t)[SIZE])
-
@KasF: Geht leider nur mit statischen Arrays und so wie es da steht auch nur mit Strings, die nicht nullteminiert sind.
-
bstr schrieb:
@KasF: Geht leider nur mit statischen Arrays und so wie es da steht auch nur mit Strings, die nicht nullteminiert sind.
Das alles spielt keine Rolle. Jedes Array kann an diese Referenz gebunden werden. Egal ob irgendwas statisch, nicht-statisch, null-terminiert oder nicht-null-terminiert ist.