Compositeという名前のクラスを正常にラップしました。このクラスには次のメソッドがあります。
std::vector<Composite*> Composite::getChildren();
vector_indexing_suiteを使用して、返されたstd :: vectorを次のようにラップしようとしました:[snippet]
typedef std::vector<Composite*> CompositeArray;
BOOST_PYTHON_MODULE(composite)
{
class_<CompositeArray>("CompositeArray")
.def(vector_indexing_suite<CompositeArray, true>());
class_<Composite>("Composite", init<>())
... more wrapper
.def("getChildren", &Composite::getChildren)
... more wrapper
;
}
これですべてが正しく機能しているように見え、PythonからgetChildren()メソッドを呼び出すと、ラップされたCompositeArrayが正しく返されます。たとえば、次のことができます。
from composite import Composite
myComp = Composite()
myComp.addChild('childA')
myComp.addChild('childB')
len(myComp.getChildren()) #returns 2
myComp.getChildren()[0] # returns the first child of type Composite
しかし、次のように、CompositeArrayを反復処理しようとすると次のようになります。
for child in myComp.getChildren():
# do something with child...
このエラーメッセージが表示されました:
TypeError: No to_python (by-value) converter found for C++ type: class Composite * __ptr64
インデックスによるアクセスが完全に機能したことを考えると、これは私には意味がありません。私はこれに固執しています...あなたは私が間違っていることについて何か考えがありますか?
ありがとうございました。