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
#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
// ----------------------------------------------------------------------------
@ -107,7 +114,7 @@ template <class Channel,
size_t Bpp, int R, int G, int B, int A = -1,
class Pixel = wxUint32>
struct WXDLLEXPORT wxPixelFormat
struct wxPixelFormat
{
// iterator over pixels is usually of type "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
// want
template <>
struct WXDLLEXPORT wxPixelFormatFor<wxImage>
struct wxPixelFormatFor<wxImage>
{
typedef wxImagePixelFormat Format;
};
@ -200,7 +207,7 @@ struct WXDLLEXPORT wxPixelFormatFor<wxImage>
wxPixelDataBase is just a helper for wxPixelData: it contains things common
to both wxImage and wxBitmap specializations.
*/
class WXDLLEXPORT wxPixelDataBase
class wxPixelDataBase
{
public:
// origin of the rectangular region we represent
@ -268,10 +275,10 @@ protected:
// we need to define this skeleton template to mollify VC++
template <class Image>
struct WXDLLEXPORT wxPixelDataOut
struct wxPixelDataOut
{
template <class PixelFormat>
class WXDLLEXPORT wxPixelDataIn
class wxPixelDataIn
{
public:
class Iterator { };
@ -282,12 +289,12 @@ struct WXDLLEXPORT wxPixelDataOut
// wxPixelData specialization for wxImage: this is the simplest case as we
// don't have to care about different pixel formats here
template <>
struct WXDLLEXPORT wxPixelDataOut<wxImage>
struct wxPixelDataOut<wxImage>
{
// NB: this is a template class even though it doesn't use its template
// parameter because otherwise wxPixelData couldn't compile
template <class dummyPixelFormat>
class WXDLLEXPORT wxPixelDataIn : public wxPixelDataBase
class wxPixelDataIn : public wxPixelDataBase
{
public:
// 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
// we also have to support different pixel formats
template <>
struct WXDLLEXPORT wxPixelDataOut<wxBitmap>
struct wxPixelDataOut<wxBitmap>
{
template <class Format>
class WXDLLEXPORT wxPixelDataIn : public wxPixelDataBase
class wxPixelDataIn : public wxPixelDataBase
{
public:
// the type of the class we're working with
typedef wxBitmap ImageType;
class WXDLLEXPORT Iterator
class Iterator
{
public:
// the pixel format we use
@ -685,6 +692,7 @@ typedef wxPixelData<wxImage> wxImagePixelData;
#if wxUSE_GUI
typedef wxPixelData<wxBitmap, wxNativePixelFormat> wxNativePixelData;
typedef wxPixelData<wxBitmap, wxAlphaPixelFormat> wxAlphaPixelData;
#endif //wxUSE_GUI
// ----------------------------------------------------------------------------
@ -704,7 +712,7 @@ typedef wxPixelData<wxBitmap, wxAlphaPixelFormat> wxAlphaPixelData;
partial template specialization then and neither VC6 nor VC7 provide it.
*/
template < class Image, class PixelFormat = wxPixelFormatFor<Image> >
struct WXDLLEXPORT wxPixelIterator : wxPixelData<Image, PixelFormat>::Iterator
struct wxPixelIterator : wxPixelData<Image, PixelFormat>::Iterator
{
};