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:
@@ -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
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user