私は与えられたコードを持っています、
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 |アナコンダ2.4.1(64ビット)、 gcc:gccバージョン4.8.3(GCC)
回答:
回答№1は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)
;