У меня есть два класса C++: Foo и Bar. Конструктор Foo выглядит следующим образом:Как получить доступ к методам объектов C++ из внутреннего вектора с помощью SWIG Python
Foo(std::vector<Bar *> * bars);
Конструктор для бара и одна из его функций-членов, являются следующие:
Bar(int data)
int getData()
В моем файле интерфейса у меня есть:
%module mySwig
%{
#include "Foo.h"
#include "Bar.h"
#include <vector>
%}
%include "Foo.h"
%include "Bar.h"
%include "std_vector.i"
namespace std {
%template(VectorOfBars) vector<Bar *>;
}
Итак, в питоне я делаю следующее:
import mySwig
myBar = mySwig.Bar(5)
И теперь мне нужно создать std::vector<Bar *> *
объект передать в конструктор Foo, поэтому я стараюсь следующее:
vector = mySwig.VectorOfBars()
vector.push_back(myBar)
Чтобы проверить, было ли это успешным Стараюсь:
print vector
print vector[0]
print "data: vector[0].getData()
Если результат из третьего распечатывают все еще «5», то он был успешным, но вместо этого я получаю то, что я предполагаю, что это значение указателя вместо
<mySwig.VectorOfBars; proxy of <Swig Object of type 'std::vector< Bar *,std::allocator< Bar * > > *' at 0xb6a9c4d0> >
<mySwig.Bar; proxy of <Swig Object of type 'std::vector< Bar * >::value_type' at 0xb6a9c3b0> >
3069958048
что я делаю Неправильно? Как я могу создать вектор объектов указателя Bar, которые мне нужно передать, чтобы создать объект Foo? Почему я получаю значение указателя вместо фактического значения?