У меня есть некоторый код C ++, который возвращает boost :: shared_ptr в std :: vector, однако я не могу заставить SWIG правильно обернуть это, чтобы сделать объект итеративным в Python.Без boost :: shared_ptr работает нормально.Кто-нибудь знает, как обернуть вектор, когда он внутри shared_ptr?
Вот пример, демонстрирующий проблему:
%module example
%include <std_vector.i>
%include <boost_shared_ptr.i>
%shared_ptr(Inner)
%shared_ptr(InnerVector)
%inline %{
#include <boost/shared_ptr.hpp>
#include <vector>
struct Inner {
int dummy;
};
typedef std::vector< boost::shared_ptr<Inner> > InnerVector;
typedef boost::shared_ptr<InnerVector> InnerVectorPtr;
InnerVectorPtr getVectorPtr()
{
InnerVectorPtr v(new InnerVector());
boost::shared_ptr<Inner> i(new Inner);
i->dummy = 222;
v->push_back(i);
return v;
}
%}
%template(InnerVector) ::std::vector< boost::shared_ptr<Inner> >;
И пример скрипта Python:
import example
v = example.getVectorPtr()
print 'Vector is:', v
for i in v:
print 'Instance is:', i
print 'Value is:', i.dummy
Что для меня говорит это:
Vector is: <Swig Object of type 'InnerVectorPtr *' at 0x1127270>
Traceback (most recent call last):
File "test.py", line 5, in <module>
for i in v:
TypeError: 'SwigPyObject' object is not iterable
Есть предложения?