C++ 在boost::python向量索引套件上迭代时出现意外结果
我已经成功地包装了一个名为Composite的类。 此类具有以下方法:C++ 在boost::python向量索引套件上迭代时出现意外结果,c++,python,boost-python,stdvector,C++,Python,Boost Python,Stdvector,我已经成功地包装了一个名为Composite的类。 此类具有以下方法: std::vector<Composite*> Composite::getChildren(); 但是当我尝试在CompositeArray上迭代时,就像这样: for child in myComp.getChildren(): # do something with child... 我收到了以下错误消息: TypeError: No to_python (by-value) converter
std::vector<Composite*> Composite::getChildren();
但是当我尝试在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<>())
类(“复合”,init())
而不是
class_<Composite>("Composite", init<>())
类(“复合”,init())
类复合*\uuu ptr64
看起来像迭代器返回纯指针,而boost::python
尝试将其复制为python包装的对象。我猜您没有提供类似于class\uz()
的东西。可以显示复合::迭代器::运算符*()
的返回类型吗?谢谢elmo,但不应该显示指向类处理的复合的指针吗?我从未见过包装指针,只有类型。。。所以我现在更糊涂了。对于Composite::iterator::operator*(),Composite本身是什么意思?它只是一个普通类,没有迭代器…哦,我错过了名为CompositeArray
的容器,它继承自std::vector
。在这种情况下,CompositeArray::iterator::operator*()
的返回值将是指针。我很惊讶它会编译,因为如果您试图用.def(“some_函数”、&some_函数)
定义一个函数Composite*some_函数()
,它会给您一个错误,说明您需要提供返回策略。我认为在上面的代码中我们也需要这样做。没错,elmo,我包装了其他返回指针的方法,实际上我必须为它们指定一个返回策略。所以现在的问题可能是:我如何为包装好的std::vector(或者CompositeArray,如果您愿意的话)指定返回策略?我可能会复制并讨论这个问题。或者只是从中继承并重写get_item
,作为第一次尝试。
class_<Composite, Composite*>("Composite", init<>())
class_<Composite>("Composite", init<>())