Estoy enfrentando un problema similar al Wrap std::vector of std::vectors, C++ SWIG Python, pero no es solo un simple análisis de C++. Tengo el siguiente en mi código C++SWIG vector envuelto de vectores (C++ a python): ¿cómo reconocer el vector interno como un objeto proxy?
namespace ns {
typedef unsigned long long uint64_t;
typedef std::vector<uint64_t> Vector;
typedef std::vector<Vector> VectorOfVectors;
class MyClass {
/// ...
/// Returns a reference to the internal vector allocated in C++ land
const VectorOfVectors &GetVectors() const;
};
}
Y en la envoltura TRAGO
%module myswig
// ...
%template(Uint64V) std::vector<ns::uint64_t>;
%template(VUint64V) std::vector<std::vector<ns::uint64_t> >;
Así que la envoltura funciona bien, incluyendo la clase, y puedo recuperar vectorial de los vectores de la clase OK:
import myswig
m = myswig.MyClass()
v = m.GetVectors()
print v
Lo que me da:
<myswig.VUint64V; proxy of <Swig Object of type 'std::vector< std::vector< ns::uint64_t,std::allocator<ns::uint64_t> > > *' at 0x994a050> >
Pero si tengo acceso a un elemento en el vector, no obtengo un proxy que sea myswig.Uint64V, y este es mi problema.
x = v[0]
print x
Lo que me espero conseguir es:
<myswig.Uint64V; proxy of <Swig Object of type 'std::vector< ns::uint64_t, std::allocator<ns::uint64_t> > *' at 0x994a080> >
En cambio, yo estoy haciendo:
(<Swig Object of type 'ns::uint64_t *' at 0x994a080>, <Swig Object of type 'ns::uint64_t *' at 0x994a098>)
Es decir, el índice en el vector de vectores me está dando una tupla de 2 entradas, y no un proxy para la clase vectorial que necesito (de modo que acceder al vector interno es tan fácil como acceder a otros vectores).
Yo también estoy haciendo la advertencia:
swig/python detected a memory leak of type 'ns::uint64_t *', no destructor found.
porque por supuesto no es un destructor definido para este tipo.
¿Alguna idea?
Tengo un problema con la referencia de const y el puntero y const puntero vinculante, ¿podría proporcionar más información? – squid
La línea de definición es tan importante ... pero es tan ... poco llamativa al mismo tiempo. Me pregunto cómo lo encontrará. – squid