[C++-sig] automatic conversion of tuple to vector
Jim Bosch
talljimbo at gmail.com
Tue May 25 01:04:07 CEST 2010
On 05/24/2010 03:00 PM, Nathan Cournia wrote:
>
> Basically, the desired behavior is to have a C++ function which
> accepts a vector in C++; accept a tuple/list when in Python.
>
> I'm not sure if the FAQ is up-to-date. Is this still not possible in
> boost.python? How do people generally get the behavior I outlined
> above?
>
>
In general, you'll have to write your own custom wrapper that takes a
boost::python::object argument, and wrap that, to get this behavior:
void py_foo(boost::python::object const & py_array) {
std::vector<int> array;
// <copy py_array into array>
foo(array);
// <copy array back into py_array>
}
boost::python::def("foo", &py_foo);
The copies are unavoidable if your C++ function takes a container,
rather than a templated iterator range, simply because your Python
object doesn't actually contain a std::vector. If you can work with an
iterator range, check out my from_python_iterator class, part of the
Python extensions in the boost sandbox:
https://svn.boost.org/trac/boost/browser/sandbox/python_extensions/boost/python/from_python/iterator.hpp
Along with the to-python iterator found in the main Boost.Python
distribution, it should also help in the case where you have to make copies.
HTH
Jim Bosch
More information about the Cplusplus-sig
mailing list