Esto está muy relacionado con esta pregunta.
Independientemente de si esto es o no una práctica de encoding, me he encontrado con un código que se ve así
prueba.hh
#include using std::vector; class Test { public: vector data; };
Estoy intentando cambiar esto usando swig3.0 usando el siguiente archivo de interfaz
test.i
%module test_swig %include "std_vector.i" namespace std { %template(VectorDouble) vector; }; %{ #include "test.hh" %} %naturalvar Test::data; %include "test.hh"
Y el siguiente código de prueba.
test.py
t = test.Test() jprint(t) a = [1, 2, 3] t.data = a # fails
Al hacerlo me da el siguiente error
in method 'Test_data_set', argument 2 of type 'vector'
Esto puede solucionarse cambiando el using std::vector
en test.hh para using namespace std
o eliminando el using std::vector
y cambiando el vector
a std::vector
. Esto no es lo que quiero.
El problema es que me dieron este código tal como está. No se me permite hacer cambios, pero se supone que debo hacer que todo esté disponible en Python a través de SWIG. ¿Que está pasando aqui?
Gracias por adelantado.
Para mí, esto parece que SWIG no admite el using std::vector;
statement correctamente. Creo que es un error SWIG. Puedo pensar en las siguientes soluciones:
using namespace std;
al archivo de interfaz SWIG (esto solo afectará la forma en que se crean envoltorios; la statement de using
no ingresará el código C ++) #define vector std::vector
al archivo de interfaz SWIG (esto solo funcionará si el vector
nunca se usa como std::vector
) vector
a std::vector
. Esto hará que SWIG genere envoltorios correctos, y de nuevo no afectará el código de la biblioteca de C ++.