Passing Python list to C++ vector using Boost.python

前端 未结 2 1272
慢半拍i
慢半拍i 2021-02-02 03:05

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

相关标签:
2条回答
  • 2021-02-02 03:58

    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 Foos 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)
    
    0 讨论(0)
  • 2021-02-02 04:04

    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);
    }
    
    0 讨论(0)
提交回复
热议问题