Recientemente descubrí la existencia de boost-python y quedé asombrado por su aparente simplicidad. Quería probarlo y comencé a envolver una biblioteca de C++ existente.Cómo envolver una función init/cleanup en Boost python
Mientras envolver las llamadas básicas de la API de la biblioteca es bastante simple (nada especial, simplemente llamadas a funciones regulares y parámetros muy comunes), no sé cómo envolver adecuadamente las funciones de inicialización/limpieza:
Tal como está , mi biblioteca C++ requiere que la persona que llama primero llame al mylib::initialize()
cuando se inicia el programa, y para llamar al mylib::cleanup()
antes de que termine (en realidad también hay un objeto inicializador que se ocupa de eso, pero probablemente sea irrelevante).
¿Cómo debo envolver esto usando boost python?
Forzar a un usuario de Python para llamar mymodule.initialize()
y mymodule.cleanup()
no parece muy Pythonic. ¿Hay alguna forma de hacerlo de forma automática? Idealmente, la llamada a initialize()
se realizaría de forma transparente cuando se importe el módulo y la llamada a cleanup()
también se realizará cuando finalice el script de python.
¿Hay alguna manera de hacerlo? Si no, ¿cuál es la solución más elegante?
Gracias.
Veo que esta es la mejor manera de hacerlo. A menudo, con boost :: python si necesitas una funcionalidad especializada, simplemente creas una estructura simple como se hizo anteriormente. –
Gracias por su respuesta. Lo intentaré y lo mantendré informado :) – ereOn
Tuve que reemplazar 'class__' con' class_' para poder compilar. Y tuvo que cambiar() las últimas 2 líneas para que Python no se queje. Muchas gracias. ¿Te importa si edito tu respuesta para reflejar los cambios? – ereOn