Вот упрощенный пример того, что я хочу сделать. Предположим, у меня есть следующий код С++ в test.h
double f(double x);
double myfun(double (*f)(double x));
На данный момент не имеет значения, что делают эти функции. Важно то, что myfun принимает указатель на функцию.
После включения файла test.h в мой файл интерфейса, я скомпилировал модуль python "test" с помощью SWIG. Теперь, в Python, я запускаю следующие команды:
import test
f = test.f
Это создает правильно действующую функцию f, которая принимает двойной. Однако, когда я пытаюсь передать "f" в myfun внутри python, это происходит:
myfun(f)
TypeError: in method 'myfun', argument 1 of type 'double (*)(double)'
Как это исправить? Я полагаю, мне нужно объявление typemap в моем файле интерфейса SWIG, но я не уверен, что такое правильный синтаксис или где его разместить. Я попробовал
%typemap double f(double);
но это не сработало. Любые идеи?