/ / Boost.Python boost :: shared_ptr - 値変換によるpythonの検出 - python、c ++、boost、shared-ptr、boost-python

Boost.Python boost :: shared_ptrいいえ、値のコンバーターでPythonを見つけました - 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 |アナコンダ2.4.1(64ビット)、 gcc:gccバージョン4.8.3(GCC)

回答:

回答№1は1

公開する必要があります A そして APtrCollectionboost::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)
;