Wie man mit SWIG eine c ++ - Funktion umschließt, die einen Funktionszeiger in Python aufnimmt

Hier ist ein vereinfachtes Beispiel dafür, was ich tun möchte. Angenommen, ich habe den folgenden C ++ - Code in test.h

double f(double x);
double myfun(double (*f)(double x));

Was diese Funktionen bewirken, ist im Moment eigentlich egal. Wichtig ist, dass myfun einen Funktionszeiger aufnimmt.

Nachdem ich die Datei test.h in meine Interface-Datei aufgenommen hatte, kompilierte ich mit SWIG ein Python-Modul "test". Jetzt führe ich in Python die folgenden Befehle aus:

import test
f = test.f

Dies schafft eine richtig funktionierende Funktion f, die ein Double aufnimmt. Wenn ich jedoch versuche, "f" in myfun innerhalb von Python zu übergeben, passiert Folgendes:

myfun(f)
TypeError: in method 'myfun', argument 1 of type 'double (*)(double)'

Wie behebe ich das? Ich glaube, ich brauche eine Typemap-Deklaration in meiner SWIG-Schnittstellendatei, bin mir aber nicht sicher, welche Syntax die richtige ist oder wo ich sie ablegen soll. Ich habe es versucht

%typemap double f(double);

aber das hat nicht funktioniert. Irgendwelche Ideen?