die Verwendung von extern-templates (C++11)

Abbildung 1: Funktion Vorlagen

TemplHeader.h

template<typename T>
void f();

TemplCpp.cpp

template<typename T>
void f(){
   //...
}    
//explicit instantation
template void f<T>();

Main.cpp

#include "TemplHeader.h"
extern template void f<T>(); //is this correct?
int main() {
    f<char>();
    return 0;
}

Ist dies die richtige Art und Weise zu verwenden extern template oder verwende ich dieses Schlüsselwort nur für die Klasse Vorlagen, wie in Abbildung 2?

Abbildung 2: Klassen-templates

TemplHeader.h

template<typename T>
class foo {
    T f();
};

TemplCpp.cpp

template<typename T>
void foo<T>::f() {
    //...
}
//explicit instantation
template class foo<int>;

Main.cpp

#include "TemplHeader.h"
extern template class foo<int>();
int main() {
    foo<int> test;
    return 0;
}

Ich weiß, es ist gut, dies alles in einer header-Datei, aber wenn wir instanziieren von templates mit den gleichen Parametern in mehrere Dateien, dann haben wir mehrere gleichen Definitionen und der compiler entfernen Sie alle (außer einem), um Fehler zu vermeiden. Wie verwende ich extern template? Können wir es verwenden, nur für die Klassen, oder können wir es verwenden, für Funktionen auch?

Auch Abbildung 1 und Abbildung 2 kann erweitert werden, um eine Lösung, wo die Vorlagen sind in einer einzigen header-Datei . In diesem Fall brauchen wir das extern template Stichwort, damit nicht mehrere gleiche instantations. Dies ist nur für Klassen oder Funktionen zu?

Dies ist nicht die korrekte Verwendung von extern-templates an alle... diese nicht selbst kompilieren
Könnten Sie einige Zeit dauern, zu formulieren, die (eine) Frage klarer? Was stellst du den code für? Ich sehe nicht, eine Frage im Zusammenhang. Auch extern template class foo<int>(); scheint wie ein Fehler.
es stellt so gut auf meinem visual studio 2010, außer die Warnmeldung:Warnung 1 Warnung C4231: Nichtstandard-Erweiterung verwendet : 'extern' vor der Vorlage explizite Instantiierung
Frage ist sehr einfach: wie, und bei der Verwendung von extern-templates Schlüsselwort? (extern-template ist C++0x neue Zukunft btw) Sie sagte: "Auch extern template class foo<int>(); scheint wie ein Fehler." Nein ist es nicht, ich habe die neue C++ - Buch und das Beispiel aus meinem Buch.
dann visual studio ist echt doof.. in der zweiten der Prototyp nicht mit der Umsetzung, und auch wenn ich das beheben, dass er sagt 'erwartet unqualified-id" in der Nähe () auf der extern-Linie. sowohl Ihr Buch und visual studio sind falsch, versuchen Sie es mit mehr standard-konformen compiler wie g++ oder clang und Sie werden sehen, das problem.

InformationsquelleAutor codekiddy | 2011-11-15

Schreibe einen Kommentar