2

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

インデックスによるアクセスが完全に機能したことを考えると、これは私には意味がありません。私はこれに固執しています...あなたは私が間違っていることについて何か考えがありますか?

ありがとうございました。

4

1 に答える 1