通过值转换器找到Boost.Python boost :: shared_ptr no to python

时间:2016-01-19 10:21:00

标签: python c++ boost shared-ptr boost-python

我有给定的代码,

在A.hpp

typedef boost::shared_ptr<A> APtr;   

在B.hpp

typedef std::vector<APtr> APtrCollection;                      
typedef boost::shared_ptr<APtrCollection> APtrCollectionPtr;
APtrCollectionPtr a_ptr;

APtrCollectionPtr B::get_items() {
     return a_ptr;
}

在boost.python接口文件中

class_<B>("St")
        .def("get", get_st)
        .def("set", set_st)
        .add_property("items", &B::get_items)
;

代码编译没有错误,但是当我运行时,我得到错误

     TypeError: 'No to_python (by-value) converter found for C++ type: boost::shared_ptr<std::vector<boost::shared_ptr<A>, std::allocator<boost::shared_ptr<A> > > >'

如何解决这个问题?

我的提升版是:1.57, python:Python 2.7.11 | Anaconda 2.4.1(64位), gcc:gcc版本4.8.3(GCC)

1 个答案:

答案 0 :(得分:1)

您需要先将AAPtrCollection公开给boost::python

class_<A>("A")
    // You can put stuff here or just leave it blank
    ;

class_<APtrCollection>("APtrCollection")
    .def(vector_indexing_suite<APtrCollection>())
    ;

现在就像以前一样:

class_<B>("St")
    .def("get", get_st)
    .def("set", set_st)
    .add_property("items", &B::get_items)
    ;