spezialisierte Template-Klasse mit Unterklasse in Dll exportieren
-
Hallo,
ich möchte eine spezialisierte Template-Klasse, die eine Unterklasse enthält, in eine DLL exportieren. Leider klappt der Export dieser Unterklasse (CSub) nicht. Die Methoden der Hauptklasse (CMain) werden aber ordnungsgemäß exportiert.
template <class T> class CMain { public: class /*__declspec(dllexport)*/ CSub { friend class CMain<T>; public: CSub(); virtual ~CSub(); // .. und weitere Methoden bzw. Membervariablen }; CVector(); virtual ~CVector(); // .. und weitere Methoden bzw. Membervariablen }; // Spezialisierung und Export der Hauptklasse template class __declspec(dllexport) CMain<double>;die folgende Variante, nach der Spezialisierung der Hauptklasse, die Unterklasse zu exportieren, habe ich schon vergeblich probiert.
__declspec(dllexport) CMain<double>::CSub; //geht auch nichtAuch die Variante (siehe Zeile 5 (auskommentiert) im Beispiel) das __decspec(dllexport) vor die Deklaration der Unterklasse zu setzen, funktioniert nicht. Da in der DLL laut Dependencywalker nun zwar der Unterklassenname auftaucht aber trotzdem die Methoden fehlen.
Wer kann mir weiterhelfen?
-
Nur zur Information, falls noch jemand auf das Problem stößt. Es läßt sich wie folgt umgehen.
template <class T> class CMain; //damit CMain in CSub bekannt, wegen friend deklaration // externe Deklaration der eigentlichen Unterklasse template <class T> class CSub { friend class CMain<T>; public: CSub(); virtual ~CSub(); // .. und weitere Methoden bzw. Membervariablen }; template <class T> class CMain { public: typedef CSub<T> CSub; //hier wird CSub zur Unterklasse gemacht CVector(); virtual ~CVector(); // .. und weitere Methoden bzw. Membervariablen }; // Spezialisierung und Export der Unterklasse und der Hauptklasse template class __declspec(dllexport) CSub<double>; template class __declspec(dllexport) CMain<double>;
-
CVector() und virtual ~CVector() ist natürlich Quatsch, das ist CMain jeweils.