[C++-sig] Wrapping classes that inherit from classes already wrapped

Alex Olivas olivas at icecube.umd.edu
Tue Feb 14 19:56:22 CET 2012


Hey All,
     I was working on a project a few months ago where I
was wrapping a lib ( using Boost.Python ) that inherited
from classes that were already wrapped ( using SIP ).
Boost.Python however couldn't find the base classes.  I
hacked something up ( that I'm not very proud of ) in class.cpp :

    type_handle get_class(type_info id)
     {
         type_handle result(query_class(id));

         if (result.get() == 0)
         {
           PyObject* globals = PyEval_GetGlobals() ;
           PyObject* key = object( id.name() ).ptr() ;
           PyObject* obj = PyDict_GetItem( globals, key );
           if( obj ){
             return type_handle( obj->ob_type );
           }else{
             object report("extension class wrapper for base class ");
             report = report + id.name() + " has not been created yet";
             PyErr_SetObject(PyExc_RuntimeError, report.ptr());
             throw_error_already_set();
           }
         }
         return result;
     }


Surely there has to be a better way.  Does anyone have a
better solution than this?

This was also followed by metaclass and layout conflicts,
but that's another issue I think.

To give a little background I was trying to wrap a lib that
inherits from Qt and I really would prefer to use the
bindings from PyQt rather than re-wrap ( which also seems
more difficult than I thought it would be ).
Thanks,
Alex.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20120214/35af41f7/attachment.html>


More information about the Cplusplus-sig mailing list