Cómo ajustar una función c ++ que toma un puntero de función en python usando SWIG
Aquí hay un ejemplo simplificado de lo que quiero hacer. Supongamos que tengo el siguiente código de c ++ en test.h
double f(double x);
double myfun(double (*f)(double x));
Realmente no importa por ahora qué hacen estas funciones. Lo importante es que myfun toma un puntero de función.
Después de incluir el archivo test.h en mi archivo de interfaz, compilé una "prueba" del módulo de Python usando SWIG. Ahora, en Python, ejecuto los siguientes comandos:
import test
f = test.f
Esto crea una función de funcionamiento adecuada f, que toma un doble. Sin embargo, cuando trato de pasar "f" en myfun dentro de Python, esto es lo que sucede:
myfun(f)
TypeError: in method 'myfun', argument 1 of type 'double (*)(double)'
¿Cómo puedo solucionar esto? Supongo que necesito una declaración de tipo de mapa en mi archivo de interfaz SWIG, pero no estoy seguro de cuál es la sintaxis adecuada o dónde colocarla. Lo intenté
%typemap double f(double);
Pero eso no funcionó. ¿Algunas ideas?