[C++-sig] reuse C++ classes that have been wrapped with SWIG

Marco Selinger marco.selinger at yahoo.de
Tue Jul 20 09:31:48 CEST 2010


Dear Hans,
your explanations are very helpful.

Now it is obvious that I should not redeclare the opencv classes in boost.python 
after they have been wrapped with swig. But still I did not think about it in 
the right way.

You write:
>Instead, you *may* define a manual converter to make your life easier, i.e. let 

>boost::python wrap your functions and automatically call SWIGs wrap/unwrap 
>functions for the corresponding OpenCV classes.
Do you have some example, how this can be achieved? Do I need to do some text 
processing or parsing of the swig output to find out which (un)wrap functions to 
call? I have never worked on the internals of swig, so that I wouldn't know 
where to find those (un)wrappers.

Thanks
Marco


________________________________
Von: Hans Meine <hans_meine at gmx.net>
An: Development of Python/C++ integration <cplusplus-sig at python.org>
Gesendet: Montag, den 19. Juli 2010, 10:55:49 Uhr
Betreff: Re: [C++-sig] reuse C++ classes that have been wrapped with SWIG

On Thursday 15 July 2010 13:35:55 Marco Selinger wrote:
> There is a complete SWIG wrapper for the OpenCV
> (http://opencv.willowgarage.com) project.
> 
> I am developing a small image processing application that uses some of the
> OpenCV classes. This application will be wrapped using Boost.Python.
> How do I declare those classes in Boost.Python that have already been
> wrapped with SWIG?

For all these questions (involving SIP/SWIG/BPL/...), remember that they're 
all based on the common Python/C API.  Thus, each of these wrapping libraries 
have means to convert from/to python, i.e. wrapping a C++ object pointer into 
a (PyObject *) and vice versa.  One just needs to know how this is done with 
each of the above, and depending on the lifetime management.

Additionally, you should *not* "declare those classes in Boost.Python" again, 
i.e. using class_<...>.  (That would lead to incompatible wrappers.)  Instead, 
you *may* define a manual converter to make your life easier, i.e. let 
boost::python wrap your functions and automatically call SWIGs wrap/unwrap 
functions for the corresponding OpenCV classes.  (The alternative is to 
declare your functions with (PyObject *) pointers and manually call these SWIG 
functions, which is probably easier if you have just one or two functions to 
wrap.)

HTH from an overview point,
  Hans
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig at python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig






More information about the Cplusplus-sig mailing list