我已经成功包装了一个名为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
对我来说没有任何意义,考虑到索引的访问工作完美! 我坚持这个......你知道我做错了吗?
谢谢。
答案 0 :(得分:2)
尝试
class_<Composite, Composite*>("Composite", init<>())
而不是
class_<Composite>("Composite", init<>())