don't use WXDLLEXPORT with nested template classes: this doesn't work

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32540 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-03-01 17:49:27 +00:00
parent 2a7367398e
commit 12e50065b4

View File

@@ -76,6 +76,13 @@
#pragma warning(disable: 4355) // 'this' used in initializer list #pragma warning(disable: 4355) // 'this' used in initializer list
#endif #endif
/*
Note: we do not use WXDLLEXPORT with classes in this file because VC++ has
problems with exporting inner class defined inside a specialization of a
template class from a DLL. Besides, as all the methods are inline it's not
really necessary to put them in DLL at all.
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxPixelFormat // wxPixelFormat
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -107,7 +114,7 @@ template <class Channel,
size_t Bpp, int R, int G, int B, int A = -1, size_t Bpp, int R, int G, int B, int A = -1,
class Pixel = wxUint32> class Pixel = wxUint32>
struct WXDLLEXPORT wxPixelFormat struct wxPixelFormat
{ {
// iterator over pixels is usually of type "ChannelType *" // iterator over pixels is usually of type "ChannelType *"
typedef Channel ChannelType; typedef Channel ChannelType;
@@ -186,7 +193,7 @@ template <class T> struct wxPixelFormatFor;
// classes (wxBitmap...) will result in compile errors which is exactly what we // classes (wxBitmap...) will result in compile errors which is exactly what we
// want // want
template <> template <>
struct WXDLLEXPORT wxPixelFormatFor<wxImage> struct wxPixelFormatFor<wxImage>
{ {
typedef wxImagePixelFormat Format; typedef wxImagePixelFormat Format;
}; };
@@ -200,7 +207,7 @@ struct WXDLLEXPORT wxPixelFormatFor<wxImage>
wxPixelDataBase is just a helper for wxPixelData: it contains things common wxPixelDataBase is just a helper for wxPixelData: it contains things common
to both wxImage and wxBitmap specializations. to both wxImage and wxBitmap specializations.
*/ */
class WXDLLEXPORT wxPixelDataBase class wxPixelDataBase
{ {
public: public:
// origin of the rectangular region we represent // origin of the rectangular region we represent
@@ -268,10 +275,10 @@ protected:
// we need to define this skeleton template to mollify VC++ // we need to define this skeleton template to mollify VC++
template <class Image> template <class Image>
struct WXDLLEXPORT wxPixelDataOut struct wxPixelDataOut
{ {
template <class PixelFormat> template <class PixelFormat>
class WXDLLEXPORT wxPixelDataIn class wxPixelDataIn
{ {
public: public:
class Iterator { }; class Iterator { };
@@ -282,12 +289,12 @@ struct WXDLLEXPORT wxPixelDataOut
// wxPixelData specialization for wxImage: this is the simplest case as we // wxPixelData specialization for wxImage: this is the simplest case as we
// don't have to care about different pixel formats here // don't have to care about different pixel formats here
template <> template <>
struct WXDLLEXPORT wxPixelDataOut<wxImage> struct wxPixelDataOut<wxImage>
{ {
// NB: this is a template class even though it doesn't use its template // NB: this is a template class even though it doesn't use its template
// parameter because otherwise wxPixelData couldn't compile // parameter because otherwise wxPixelData couldn't compile
template <class dummyPixelFormat> template <class dummyPixelFormat>
class WXDLLEXPORT wxPixelDataIn : public wxPixelDataBase class wxPixelDataIn : public wxPixelDataBase
{ {
public: public:
// the type of the class we're working with // the type of the class we're working with
@@ -470,16 +477,16 @@ struct WXDLLEXPORT wxPixelDataOut<wxImage>
// wxPixelData specialization for wxBitmap: here things are more interesting as // wxPixelData specialization for wxBitmap: here things are more interesting as
// we also have to support different pixel formats // we also have to support different pixel formats
template <> template <>
struct WXDLLEXPORT wxPixelDataOut<wxBitmap> struct wxPixelDataOut<wxBitmap>
{ {
template <class Format> template <class Format>
class WXDLLEXPORT wxPixelDataIn : public wxPixelDataBase class wxPixelDataIn : public wxPixelDataBase
{ {
public: public:
// the type of the class we're working with // the type of the class we're working with
typedef wxBitmap ImageType; typedef wxBitmap ImageType;
class WXDLLEXPORT Iterator class Iterator
{ {
public: public:
// the pixel format we use // the pixel format we use
@@ -685,6 +692,7 @@ typedef wxPixelData<wxImage> wxImagePixelData;
#if wxUSE_GUI #if wxUSE_GUI
typedef wxPixelData<wxBitmap, wxNativePixelFormat> wxNativePixelData; typedef wxPixelData<wxBitmap, wxNativePixelFormat> wxNativePixelData;
typedef wxPixelData<wxBitmap, wxAlphaPixelFormat> wxAlphaPixelData; typedef wxPixelData<wxBitmap, wxAlphaPixelFormat> wxAlphaPixelData;
#endif //wxUSE_GUI #endif //wxUSE_GUI
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -704,7 +712,7 @@ typedef wxPixelData<wxBitmap, wxAlphaPixelFormat> wxAlphaPixelData;
partial template specialization then and neither VC6 nor VC7 provide it. partial template specialization then and neither VC6 nor VC7 provide it.
*/ */
template < class Image, class PixelFormat = wxPixelFormatFor<Image> > template < class Image, class PixelFormat = wxPixelFormatFor<Image> >
struct WXDLLEXPORT wxPixelIterator : wxPixelData<Image, PixelFormat>::Iterator struct wxPixelIterator : wxPixelData<Image, PixelFormat>::Iterator
{ {
}; };