Articles of Swig

Usando SWIG con puntero para funcionar en C struct

Estoy tratando de escribir un contenedor SWIG para una biblioteca de C que utiliza punteros a funciones en sus estructuras. No puedo averiguar cómo manejar estructuras que contienen punteros de función. Un ejemplo simplificado sigue. prueba.i: /* test.i */ %module test %{ typedef struct { int (*my_func)(int); } test_struct; int add1(int n) { return n+1; […]

Cómo exponer una clase de C ++ a Python sin construir un módulo

Quiero saber si hay alguna forma de exponer una clase de C ++ a Python pero sin construir una biblioteca compartida intermedia. Aquí está mi escenario deseable. Por ejemplo tengo la siguiente clase de C ++: class toto { public: toto(int iValue1_, int iValue2_): iValue1(iValue1_), iValue2(iValue2_) {} int Addition(void) const {if (!this) return 0; return […]

SWIG: Cómo pasar la lista de complejos de c ++ a python

Tengo una función en c ++ que devuelve una lista de complejos: #include std::list< std::complex > func(…); ¿Qué debo hacer en el archivo ‘* .i’? Gracias a todos. ================= Los siguientes son detalles: la función que me gustaría usar en python en xh: std::list<std::complex > roots1(const double& d, const double& e); He intentado algunas maneras: […]

¿Cómo SWIG ajusta un mapa en Python?

Estoy usando SWIG 2.0 para crear un contenedor de Python para una biblioteca de C ++. Un método tiene un argumento de tipo “const std :: map &”. SWIG felizmente genera una envoltura para él, pero no puedo descubrir cómo invocar el método. Si paso, por ejemplo, {“a”: “b”} para ese argumento, obtengo un error […]

setup.py: ejecuta build_ext antes que nada

Estoy trabajando con un setup.py que crea un montón de archivos de interfaz SWIG durante el paso build_ext. Esto debe ejecutarse primero, porque los pasos de comstackción posteriores necesitan una lista completa de los archivos de Python para funcionar correctamente (como copiar los archivos de Python al directorio del paquete, crear el huevo, crear la […]

Cómo manejar unique_ptr’s con SWIG

Tengo una clase EventDispatcher que implementa el patrón de publicación-suscripción. Su interfaz se ve algo como esto (simplificado): class EventDispatcher { public: void publish(const std::string& event_name, std::unique_ptr event); std::unique_ptr subscribe(const std::string& event_name, std::unique_ptr callback); private: std::unordered_map<std::string, std::vector<std::unique_ptr>> m_subscriptions; } Quiero exponer esta clase a Python. La última documentación de SWIG establece que: No hay un […]

SWIG envolviendo C ++ para Python: traduciendo una lista de cadenas a un vector STL de cadenas STL

Me gustaría envolver una función C ++ con SWIG que acepte un vector de cadenas STL como un argumento de entrada: #include #include #include using namespace std; void print_function(vector strs) { for (unsigned int i=0; i < strs.size(); i++) cout << strs[i] << endl; } Quiero envolver esto en una función de Python disponible en […]

¿Cómo cambio la versión de python en Maya 2013?

Mi objective es escribir un script de python en Maya 2013 que use una biblioteca pyd envuelta en SWIG que se comstack usando Python 2.7. No puedo reconstruir el pyd en Python 2.6.4, que es la versión a la que está vinculado Maya. Maya por supuesto luego da este error. Module use of python27.dll conflicts […]

¿Es posible dividir un módulo SWIG para comstackción, pero volver a unirlo al vincular?

Me topé con este problema hace unos dos años, cuando implementé por primera vez nuestros enlaces SWIG. Tan pronto como expusimos una gran cantidad de código, llegamos al punto en que SWIG generaba archivos C ++ tan grandes que el comstackdor no podía manejarlos. La única forma de solucionar el problema era dividir las interfaces […]

Estructura de directorios para un proyecto que mezcla C ++ y Python.

Digamos que quieres crear un proyecto de progtwigción que mezcle C ++ y Python . La estructura del proyecto Foo C ++ usa CMake , y se crea un módulo Python utilizando Swig . La estructura del árbol se vería algo así: ├── CMakeLists.txt ├── FooConfig.cmake.in ├── FooConfigVersion.cmake.in ├── Makefile ├── README ├── foo │ […]