added WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE() macro and use it to work around VC6 warnings about non DLL-exported templates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48691 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-09-14 21:02:09 +00:00
parent cb626df225
commit 7c77f33480
3 changed files with 46 additions and 1 deletions

View File

@@ -281,5 +281,34 @@
#define WXDLLEXPORT WXDLLIMPEXP_CORE
#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE
/*
MSVC up to 6.0 needs to be explicitly told to export template instantiations
used by the DLL clients, use this macro to do it like this:
template <typename T> class Foo { ... };
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( Foo<int> )
(notice that currently we only need this for the wxBase library)
*/
#if defined(__VISUALC__) && (__VISUALC__ <= 1200)
#ifdef WXMAKINGDLL_BASE
#define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \
template class WXDLLIMPEXP_BASE decl;
#else
/*
We need to disable this warning when using this macro, as
recommended by Microsoft itself:
http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b168958
*/
#pragma warning(disable:4231)
#define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \
extern template class WXDLLIMPEXP_BASE decl;
#endif
#else /* not VC <= 6 */
#define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl)
#endif /* VC6/others */
#endif /* _WX_DLIMPEXP_H_ */