Wie extern template richtig nutzen?
-
Ich spiele gerade mit
extern template
herum. Folgendes Beispiel erzeugt bei mir eine Fehler in der IDE, nicht aber beim Kompilieren:// test.h template<class T> struct foo { T bar; }; extern template struct foo<int>;
#include "test.h" template struct foo<int>; int main() { foo<int> baz; baz.bar = 42; return 0; }
Visual C++ 2017 meint in der IDE zu test.h
'extern template' cannot follow explicit instantiation of class "foo<int>"
, frisst den Code aber ohne eigentliche Compiler Warnung.Mache ich grundsätzlich etwas falsch oder ist das einfach eine Macke?
-
extern soll die Instanziierung in einer Datei bzw sehr vielen Dateien verhindern. Folgende Dateien compilieren und linken geht:
// test.h template<class T> struct foo { T bar; };
// test.cpp #include "test.h" extern template struct foo<int>; // hier nicht inst. int main() { foo<int> baz; baz.bar = 42; return 0; }
// instanz.cpp #include "test.h" template struct foo<int>;
Dateien wie test.cpp könnte es viele geben. Die Instanziierung läüft nur einmal. Meinst Du es so?