2008-11-10 12 views
15

estoy tratando de exponer esta función para Python usando el TRAGO:Cómo exponer std :: vector <int> como una lista de Python usando SWIG?

std::vector<int> get_match_stats(); 

Y quiero TRAGO para generar código de envoltura para Python para que pueda ver como una lista de números enteros.

La adición de este al archivo .i:

 
%include "typemaps.i" 
%include "std_vector.i" 

namespace std 
{ 
    %template(IntVector) vector<int>; 
} 

estoy corriendo SWIG Version 1.3.36 y llamando trago con -Wall y me da ninguna advertencia.

soy capaz de obtener acceso a una lista pero me da un montón de advertencias al compilar con -Wall (con g++ (GCC) 4.2.4) el código generado C++ que dicen:

 
    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 en cuestión 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 en cuestión:

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

Más de código que sigue.

La alarma generados 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 

Respuesta

15
%template(IntVector) vector<int>; 
+0

Eso es lo que probé y recibo un montón de advertencias al compilar con g ++. ¿Algunas ideas? –

+1

¿Qué versión de g ++ estás usando? Estoy usando 4.1.2 y no recibo ninguna advertencia, incluso con -Wall. No recuerdo ninguna advertencia cuando estaba usando 3.3 más o menos. Tenga en cuenta el extra "" en esta publicación que falta en la publicación original. –

+0

El estaba allí, pero no se veía. ¡Arreglado! –

0

no tengo mucha experiencia con trago, pero es usted #including el archivo de encabezado de C++ en su archivo .i ? Pruebe uno (o ambos) de

%include "myvector.h" 


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