[C++-sig] more examples of automatic type conversion

Roman Yakovenko roman.yakovenko at gmail.com
Thu May 3 13:08:41 CEST 2007


On 5/3/07, Albert Strasheim <fullung at gmail.com> wrote:
>
> On Wed, 02 May 2007, Roman Yakovenko wrote:
>
> > On 5/2/07, Eric Jonas <jonas at mit.edu> wrote:
> > > Hello! I'm using boost::python to try and interface numpy (that is,
> the
> > > newest numpy, not numeric or numarray) ndarray objects to my code
> which
> > > depends on boost::multi_array. I've written functions that take a
> > > pyobject* and return a multiarray and vice versa. Now I'm at the point
> > > of interfacing my c++ classes (which take multi_array references in
> > > their constructors). Rather than adulterating their interfaces by
> adding
> > > additional constructors with PyObject* arguments, is there some way of
> > > telling boost::python to use my conversion functions automatically?
> >
> >
> http://www.language-binding.net/pyplusplus/troubleshooting_guide/automatic_conversion/automatic_conversion.html
> >
> > Let me know if this helped you.
>
> As luck would have it, I also started playing with this idea yesterday
> and I found the above-mentioned page to help me along. I'm mostly
> interested in wrapping an interface written in terms of uBLAS vectors,
> matrices and vector-of-vectors.


:-), good

One issue I've run into with uBLAS is that there doesn't seem to be an
> array adaptor (the A in matrix<T, L, A>) that can be used to wrap
> existing memory without copying at some point. Writing an array adaptor
> like this shouldn't be too hard though.


You don't have, use indexing suite v2:
http://language-binding.net/pyplusplus/documentation/containers.html
And example of usage:
http://language-binding.net/pyplusplus/documentation/functions/call_policies.html#return-range


> Another issue is that you have to be very careful with the
> vector/matrix type you use, since converting a NumPy array to
> matrix<T, L, adapter_that_doesnt_copy<T> > and passing that to a
> function that expects matrix<T> doesn't work (strange crashes, probably
> due to the slight difference in size between the objects, due to the
> different array adaptors being used).
>
> Anyway, I've more or less got pass-by-value and return-by-value working
> using Roman's example, but I can't quite figure out how to make
> Boost.Python convert pointer and reference arguments or return values
> into PyObject*'s using the same scheme. Should this just work if I have
> my automatic conversion set up correctly, or is there additional magic
> that needs to be added? Again, it would be *very* useful if copying
> could be avoided here.


Post small example, may be I will be able to help

-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20070503/e2a363ad/attachment.htm>


More information about the Cplusplus-sig mailing list