我有给定的代码,
在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)
答案 0 :(得分:1)
您需要先将A
和APtrCollection
公开给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)
;