[PyQt] banging my head on returning short* as void*
Phil Thompson
phil at riverbankcomputing.com
Mon Aug 31 22:13:31 BST 2009
On Sat, 29 Aug 2009 20:42:47 +0200, "Diez B. Roggisch" <deets at web.de>
wrote:
> Hi,
>
> I'm trying to wrap a method with the following signature:
>
> virtual const u16* getIndices() const
>
> where u16 is typedef'd as simple unsigned short.
>
> Actually, what I'm really just need is a void* here - the indices are
> passed to some other function which takes them as such.
>
> So I tried various things - just giving the above signature makes sip
> fail (understandably) with
>
> sip: irr::scene::SMeshBuffer::getIndices() unsupported function return
> type - provide %MethodCode and a C++ signature
> error: command
> '/Library/Frameworks/Python.framework/Versions/2.6/bin/sip' failed with
> exit status 1
>
>
> So I tried altering the return-type to void*, what made GCC fail with
>
>
> cc1plus: warning: command line option "-Wstrict-prototypes" is valid for
> C/ObjC but not for C++
> sipirrlichtirrsceneSMeshBuffer.cpp:37: warning: deprecated covariant
> return type for ‘virtual void* sipirr_scene_SMeshBuffer::getVertices()
> const’
> ../irrlicht-1.5_svn/include/CMeshBuffer.h:47: warning: overriding
> ‘const void* irr::scene::CMeshBuffer<T>::getVertices() const [with T =
> irr::video::S3DVertex]’
> sipirrlichtirrsceneSMeshBuffer.cpp:40: error: conflicting return type
> specified for ‘virtual void* sipirr_scene_SMeshBuffer::getIndices()
> const’
> ../irrlicht-1.5_svn/include/CMeshBuffer.h:77: error: overriding
‘const
> irr::u16* irr::scene::CMeshBuffer<T>::getIndices() const [with T =
> irr::video::S3DVertex]’
> sipirrlichtirrsceneSMeshBuffer.cpp: In member function ‘virtual void*
> sipirr_scene_SMeshBuffer::getVertices() const’:
> sipirrlichtirrsceneSMeshBuffer.cpp:105: error: invalid conversion from
> ‘const void*’ to ‘void*’
> sipirrlichtirrsceneSMeshBuffer.cpp: In member function ‘virtual void*
> sipirr_scene_SMeshBuffer::getIndices() const’:
> sipirrlichtirrsceneSMeshBuffer.cpp:150: error: invalid conversion from
> ‘const void*’ to ‘void*’
> irr_scene.sip: In function ‘PyObject*
> meth_irr_scene_SMeshBuffer_append(PyObject*, PyObject*)’:
> irr_scene.sip:1062: warning: comparison between signed and unsigned
> integer expressions
> irr_scene.sip:1065: warning: comparison between signed and unsigned
> integer expressions
> error: command 'gcc-4.2' failed with exit status 1
>
>
>
> I found sipConvertFromVoidPtr, but don't know how to really use that.
>
> Any suggestions?
It depends on how general you want the solution to be. If you are talking
about a single method then it is easiest to provide %MethodCode and
%VirtualCatcherCode for that method.
For a more general solution you could typedef const u16* to a phoney type
that you then implemented as a mapped type using whatever Python object you
wanted to represent it.
Phil
More information about the PyQt
mailing list