Tengo un montón de clases y API escritas en C++ y Python expuestos a la ayuda de Boost.PythonPython en C++ utilizando la función de conversión Boost.Python
Actualmente estoy investigando las posibilidades de crear la siguiente arquitectura.
en Python:
from boostPythonModule import *
AddFunction(boostPythonObject.Method1, args)
AddFunction(boostPythonObject.Method2, args)
AddFunction(boostPythonObject.Method2, args)
RunAll() # running is done by C++
En C++:
void AddFunction(boost::object method, boost::object args)
{
/// 1. Here i need to extract a real pointer to a function
/// 2. Make argument and type checking for a function under method
/// 3. Unpack all arguments to native types
/// 4. Store the pointer to a function somewhere in local storage
}
void RunAll()
{
/// 1. run all previously stored functions and arguments for them
}
Básicamente estoy tratando de poner todas las funciones hasta la parte natural de mi programa. La cuestión es que no estoy seguro si es posible extraer todos los datos requeridos de Boost metainfo para hacer esto de manera genérica: en el momento de la compilación no debería saber qué funciones voy a llamar y qué argumentos aceptan.
Algunas preguntas:
1. ¿Hay alguna tabla compartida de información de Python a la que pueda acceder para verificar algunas de estas cosas?
2. Boost.Python no escribe comprobación de argumentos. ¿Se puede reutilizar por separado?
Déjame saber tus pensamientos.
Gracias
¿Realmente necesita verificar todos los tipos en 'AddFunction()'? ¿No sería suficiente almacenar el método y los argumentos en algún lugar y llamar a esos métodos en 'RunAll()' De esa forma obtendría cualquier tipo de error relacionado que encuentre cuando ejecute los métodos y Boost.Python lo haría por usted . – Arlaharen
Bueno, no. Básicamente, la idea es minimizar el intervalo de tiempo entre esas llamadas a funciones, por lo tanto, todos los argumentos deben verificarse antes. RuAll solo debe conocer los punteros de función C++ (es decir, functors), ¿Algún otro consejo? – Alex
En ese caso no tengo ninguno. :-) No creo que este sea un caso de uso para el que se diseñó Boost.Python y que tendrá dificultades para doblarlo y hacer lo que quiera. ¿Es el tiempo pasado en Python entre las llamadas a sus métodos realmente tan significativo que tiene que hacer esto? Pero supongo que has hecho tu perfil ... :-) – Arlaharen