[C++-sig] Using boost.python to get STL containers of PyObect's.

Eric Mahurin eric.mahurin at gmail.com
Tue Jun 26 20:34:35 CEST 2007


Hi, I'm new to the list and coming from using SWIG w/ python.  I
haven't used boost.python, but am considering it because of
frustration with SWIG.

With SWIG, I've been able to make changes to some of the existing
SWIG/STL infrastructure to get to this point:

* STL containers of a wrapped PyObject* (handles reference counting)

* Support of using a callable PyObject* as a BinaryPredicate and other
template function concepts in STL.  This allows using a python
lamda/function/method as the comparison function for various
methods/constructors.

* python read/write access to STL iterators

* wrap any STL algorithm to be used with the above wrapped STL
iterators.  I should have made it work with any python object that
implemented the python-STL iterator i/f, but for now it has to be one
of these swig-wrapped STL iterators.

Here are the problems:

* various STL methods are missing, especially some of the overloaded methods.

* STL big-O performance is not alway preserved.  I think I've fixed
the major issues (I've seen O(n**3) when it should be O(n)), but I'm
sure there are others.

* hacky and incomplete iterator API

I'm getting tired of wading through the multiple layers and confusion
that SWIG puts in to finish this.  I think what is most bothersome is
the way type conversion and overloading is handled.  I'd rather see
SWIG only try to distinguish between overloaded functions/methods by
number of arguments.  You'd be forced to rename otherwise.  IMHO,
overloading by type doesn't mix with a dynamically typed language
(i.e. duck-typed).

Has anybody done some similar with boost.python?

Eric



More information about the Cplusplus-sig mailing list