// Header file #ifdef TESTLIBRARY_EXPORTS #define TESTLIBRARY_API __declspec(dllexport) #else #define TESTLIBRARY_API __declspec(dllimport) #endif template class TESTLIBRARY_API TemplateClass { public: class InClass { public: TESTLIBRARY_API InClass(void); }; int var; T tVar; TemplateClass(T arg); int func(void); template TESTLIBRARY_API A templateFunc(A arg); int callGlobalFriendFunc(void); friend TESTLIBRARY_API int friendFunc(void); protected: int protectedFunc(void); private: int privateFunc(void); friend TESTLIBRARY_API int gloabalFriendFunc(void); }; extern TESTLIBRARY_API int globalVar; TESTLIBRARY_API int globalFunc(void); // Source file template TemplateClass::InClass::InClass() { // some code } template TemplateClass::TemplateClass(T arg) { var = protectedFunc(); tVar = arg; } template int TemplateClass::func() { return privateFunc(); } template int TemplateClass::callGlobalFriendFunc() { return globalFunc(); } template int TemplateClass::protectedFunc() { return 10; } template int TemplateClass::privateFunc() { return 55; } template template A TemplateClass::templateFunc(A arg) { return arg + 3; } // Explicit instantiations template TESTLIBRARY_API int TemplateClass::templateFunc(int arg); template TESTLIBRARY_API float TemplateClass::templateFunc(float arg); // Explicit instantiation of the class template class TESTLIBRARY_API TemplateClass; int globalVar = 1337; int globalFunc(void) { return 42; } int friendFunc(void) { return 555; }