Template-Funktion in DLL auslagern
-
Huhu,
ich habe nach diesem kleinen Tutorial einige meiner Funktionen in DLLs ausgelagert. Dasselbe würde ich nun gerne mit Template-Funktionen machen, leider zeigt mir der Disassembly (und natürlich die Fehlermeldung in VC++ beim kompilieren eines Programmes welches die Funktion aus der DLL holen will), dass die Funktion nicht ausgelagert wurde. Der Grund ist einfach zu erklären, da der Code von Templates ja erst beim Aufruf erzeugt wird.
Gibt es dennoch eine Möglichkeit, Templates in DLLs auszulagern und aufzurufen?
Gruß,
Ledertasche
-
Ledertasche schrieb:
Gibt es dennoch eine Möglichkeit, Templates in DLLs auszulagern und aufzurufen?
Nein gibt es nicht. Den Grund hast du ja schon herausgefunden. Es handelt sich um Function Templates (nicht Template Functions ;)), also eben um Vorlagen nach denen Funktionen generiert werden können und nicht um Funktionen. Eine Vorlage kannst du nicht "aufrufen", das würde auch gar keinen Sinn machen. Eine Vorlage muss erst für konkrete Typparameter instanziert, also entsprechend der Vorlage eine bestimmte Funktion generiert werden. Und diese Funktion (z.B. myFuncTemplate<int>) kannst du dann aufrufen.
Mit dllexport wäre es möglich, konkrete Instanzen eines Template in die dll zu stecken, aber nicht das Template an sich.
-
kann man denn das function template für einen bestimmten typ "instanziieren" und diese dann auslagern?
-
ipi schrieb:
kann man denn das function template für einen bestimmten typ "instanziieren" und diese dann auslagern?
Ja das sollte möglich sein.
Ungetestet:
// dll Header template <typename T> void myFunc(); extern template __declspec(dllimport) void myFunc<int>(); // dll .cpp // definition des template muss hier bekannt sein template __declspec(dllexport) void myFunc<int>(); // template explizit instanzieren.
Ich würd mir da allerdings sehr ernsthaft die Frage stellen, ob eine dll wirklich ist was ich haben will...
-
dot schrieb:
Ich würd mir da allerdings sehr ernsthaft die Frage stellen, ob eine dll wirklich ist was ich haben will...
+1