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:
parent
2a7367398e
commit
12e50065b4
@ -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
|
||||
{
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user