How do I pass a Python list of my object type ClassName
to a C++ function that accepts a vector
?
The best I found is something
Assuming you have function that takes a std::vector<Foo>
void bar (std::vector<Foo> arg)
The easiest way to handle this is to expose the vector
to python.
BOOST_PYTHON_MODULE(awesome_module)
{
class_<Foo>("Foo")
//methods and attrs here
;
class_<std::vector<Foo> >("VectorOfFoo")
.def(vector_indexing_suite<std::vector<foo> >() )
;
.def("bar", &bar)
}
So now in python we can stick Foo
s into a vector
and pass the vector to bar
from awesome_module import *
foo_vector = VectorOfFoo()
foo_vector.extend(Foo(arg) for arg in arglist)
bar(foo_vector)
Found an iterator that solves my problem:
#include <boost/python/stl_iterator.hpp>
template<typename T>
void python_to_vector(boost::python::object o, vector<T>* v) {
stl_input_iterator<T> begin(o);
stl_input_iterator<T> end;
v->clear();
v->insert(v->end(), begin, end);
}