我已经成功包装了一个名为 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
考虑到按索引访问非常有效,这对我来说没有任何意义!我被困在这个......你知道我做错了什么吗?
谢谢你。