If a function returns a std::vector
type, and it is exposed to Python directly like
std::vector<float> secondMethod() {
return std::vector<float>();
}
BOOST_PYTHON_MODULE(CppProject) {
boost::python::def("getEmptyVec", secondMethod);
}
then when the functions gets called Python will tell you No to_python (by-value) converter found for C++ type: std::vector<float, std::allocator<float> >
, because Python needs to know how to deal with std::vector
.
Fortunately boost.python has provided a wrapper funciton for us in vector_indexing_suite.hpp
. The returning value can be handled as a FloatVec
object whose element can be accessed by the []
operator, by exposing the corresponding wrapper function as following.
std::vector<float> secondMethod() {
return std::vector<float>();
}
BOOST_PYTHON_MODULE(CppProject) {
// wrapper function
class_<std::vector<float> >("FloatVec")
.def(vector_indexing_suite<std::vector<float> >());
boost::python::def("getEmptyVec", secondMethod);
}
The result can be further converted into a Python list or Numpy array simply by calling list()
and numpy.asarray()
.