意外结果迭代提升::p ython vector_indexing_suite

unexpected result iterating over a boost::python vector_indexing_suite

本文关键字:vector 结果 indexing suite ython 意外 迭代      更新时间:2023-10-16

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

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

但是当我尝试迭代复合数组时,就像这样:

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<>())
相关文章: