我已经成功包装了一个名为Composite的类。
此类具有以下方法:

std::vector<Composite*> Composite::getChildren();

我试图用vector_indexing_suite包装返回的std::vector,方法是:
[摘要]
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

考虑到按索引访问非常有效,这对我来说毫无意义!
我坚持下去...你对我做错了什么有任何想法吗?

谢谢。

最佳答案

尝试

class_<Composite, Composite*>("Composite", init<>())

代替
class_<Composite>("Composite", init<>())

关于c++ - 在boost::python vector_indexing_suite上迭代的意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11292869/

10-11 22:53
查看更多