Tengo una API de C++ que estoy tratando de envolver en Python. Quiero llamar a una función myfunc C++ envuelta tomando como argumento la siguiente C++ typedefAccediendo a typedef de C++ en Python usando SWIG
/* my_header.h */
namespace my_namespace {
typedef std::vector<Foo> Bar
}
donde foo es una clase de C++. Logré envolver la función y la clase subyacente Foo, pero no sé cómo crear el vector de Foo. He incluido el archivo .h en mi archivo .i TRAGO de la siguiente manera
/* my_interface.i */
%{
#include "my_header.h"
typedef my_namespace::Bar Bar;
%}
%include "my_header.h"
También probé envolviendo el std :: vector de plantilla en el TRAGO, de la siguiente manera
%include std_vector.i
namespace std {
%template(vector_foo) vector<Foo>;
}
Esto funciona, y puedo importar vector_foo en Python. Sin embargo, cuando envío un vector_foo como argumento a la función mencionada anteriormente, obtengo un TypeError. Tampoco puedo llenar vector_foo con Foo.
En Python hago lo siguiente
>>> a = mymodule.vector_foo()
>>> a
<Swig Object of type 'std::vector <Foo, std::allocator<Foo> > *'
>>> mymodule.myfunc(a, 'string')
TypeError: in method 'myfunc', argument 1 of type 'my_namespace::Bar &'
O si puedo hacer mi propia implementación de vector de trabajo Foo, o de alguna manera acceder al C++ typedef directamente. Llamaré a SWIG y compilaré usando Python Distutils.
¡Gracias por cualquier ayuda!
¿El hecho de que defina el typdef antes del asunto ''% include''? Hubiera supuesto que necesita definirlo después del mismo modo que lo hace en ''% {...%} '', donde aparece después de '' # include'' – spencerlyon2