c++ python stl swig

c++ - ¿Cómo exponer std:: vector<int> como una lista de Python usando SWIG?



stl (2)

No tengo mucha experiencia con Swig, pero ¿estás #incluyendo tu archivo de encabezado C ++ en tu archivo .i? Pruebe uno (o ambos) de

%include "myvector.h" %{ # include "myvector.h" %}

Estoy tratando de exponer esta función a Python usando SWIG:

std::vector<int> get_match_stats();

Y quiero que SWIG genere código de envoltura para Python para que pueda verlo como una lista de enteros.

Agregando esto al archivo .i:

%include "typemaps.i" %include "std_vector.i" namespace std { %template(IntVector) vector<int>; }

Estoy ejecutando la SWIG Version 1.3.36 y llamando a -Wall con -Wall y no recibo ninguna advertencia.

Puedo obtener acceso a una lista, pero recibo un montón de advertencias cuando -Wall con -Wall (con g++ (GCC) 4.2.4 ) el código C ++ generado que dice:

warning: dereferencing type-punned pointer will break strict-aliasing rules

¿Estoy exponiendo la función correctamente? Si es así, ¿qué significa la advertencia?

Estas son las líneas antes de la línea ofensiva en la misma función:

SWIGINTERN PyObject *_wrap_IntVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; std::vector *arg1 = (std::vector *) 0 ; std::vector::iterator arg2 ; std::vector::iterator result; void *argp1 = 0 ; int res1 = 0 ; swig::PySwigIterator *iter2 = 0 ; int res2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if (!PyArg_ParseTuple(args,(char *)"OO:IntVector_erase",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method ''" "IntVector_erase" "'', argument " "1"" of type ''" "std::vector *""''"); } arg1 = reinterpret_cast * >(argp1);

Y esta es la línea ofensiva:

res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::PySwigIterator::descriptor(), 0);

Más código sigue eso.

La advertencia generada al compilar con g ++ 4.2.4 es:

swig_iss_wrap.cxx: In function ‘PyObject* _wrap_IntVector_erase__SWIG_0(PyObject*, PyObject*)’: swig_iss_wrap.cxx:5885: warning: dereferencing type-punned pointer will break strict-aliasing rules


%template(IntVector) vector<int>;