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:
@@ -150,6 +150,8 @@ private:
|
|||||||
bool m_owned;
|
bool m_owned;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<char> )
|
||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxCharBuffer : public wxCharTypeBuffer<char>
|
class WXDLLIMPEXP_BASE wxCharBuffer : public wxCharTypeBuffer<char>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -165,6 +167,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if wxUSE_WCHAR_T
|
#if wxUSE_WCHAR_T
|
||||||
|
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<wchar_t> )
|
||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxWCharBuffer : public wxCharTypeBuffer<wchar_t>
|
class WXDLLIMPEXP_BASE wxWCharBuffer : public wxCharTypeBuffer<wchar_t>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@@ -281,5 +281,34 @@
|
|||||||
#define WXDLLEXPORT WXDLLIMPEXP_CORE
|
#define WXDLLEXPORT WXDLLIMPEXP_CORE
|
||||||
#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_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_ */
|
#endif /* _WX_DLIMPEXP_H_ */
|
||||||
|
|
||||||
|
@@ -2834,6 +2834,9 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if wxUSE_STL_BASED_WXSTRING
|
#if wxUSE_STL_BASED_WXSTRING
|
||||||
|
|
||||||
|
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxStringTypeBufferBase<wxStringCharType> )
|
||||||
|
|
||||||
class wxStringInternalBuffer : public wxStringTypeBufferBase<wxStringCharType>
|
class wxStringInternalBuffer : public wxStringTypeBufferBase<wxStringCharType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -2845,7 +2848,11 @@ public:
|
|||||||
DECLARE_NO_COPY_CLASS(wxStringInternalBuffer)
|
DECLARE_NO_COPY_CLASS(wxStringInternalBuffer)
|
||||||
};
|
};
|
||||||
|
|
||||||
class wxStringInternalBufferLength : public wxStringTypeBufferLengthBase<wxStringCharType>
|
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(
|
||||||
|
wxStringTypeBufferLengthBase<wxStringCharType> )
|
||||||
|
|
||||||
|
class wxStringInternalBufferLength
|
||||||
|
: public wxStringTypeBufferLengthBase<wxStringCharType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxStringInternalBufferLength(wxString& str, size_t lenWanted = 1024)
|
wxStringInternalBufferLength(wxString& str, size_t lenWanted = 1024)
|
||||||
@@ -2874,6 +2881,9 @@ typedef wxStringInternalBufferLength wxStringBufferLength;
|
|||||||
typedef wxStringInternalBuffer wxUTF8StringBuffer;
|
typedef wxStringInternalBuffer wxUTF8StringBuffer;
|
||||||
typedef wxStringInternalBufferLength wxUTF8StringBufferLength;
|
typedef wxStringInternalBufferLength wxUTF8StringBufferLength;
|
||||||
#elif wxUSE_UNICODE_WCHAR
|
#elif wxUSE_UNICODE_WCHAR
|
||||||
|
|
||||||
|
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxStringTypeBufferBase<char> )
|
||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxUTF8StringBuffer : public wxStringTypeBufferBase<char>
|
class WXDLLIMPEXP_BASE wxUTF8StringBuffer : public wxStringTypeBufferBase<char>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -2884,6 +2894,8 @@ public:
|
|||||||
DECLARE_NO_COPY_CLASS(wxUTF8StringBuffer)
|
DECLARE_NO_COPY_CLASS(wxUTF8StringBuffer)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxStringTypeBufferLengthBase<char> )
|
||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxUTF8StringBufferLength
|
class WXDLLIMPEXP_BASE wxUTF8StringBufferLength
|
||||||
: public wxStringTypeBufferLengthBase<char>
|
: public wxStringTypeBufferLengthBase<char>
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user