次の質問があります。コールバック関数を C コードに渡す必要があります。関数が同じモジュール内の Cython 関数である場合、状況は非常に単純です。
Cython では:
def callme(int x):
c_callme(x, <int (*)(int)>&callbackme)
cdef int callbackme(int x):
print <int> x
return <int>x
C:
int c_callme(int x, int (*f)(int))
{
printf("---%d\n",x);
printf("--%d\n",f(x));
return x;
}
問題は次のとおりです。このコードを最も Pythonic な方法で一般化して、コールバック引数として Python 関数も受け入れることができるようにしたいと考えています (もちろん、追加のレイヤーが必要です)。また、別のモジュールからの C/Cython 関数も受け入れます。別のモジュールからの C/Cython 関数の場合、これらの関数のアドレスを取得する必要があり (long int に変換しますか?)、Python 関数の場合は特定のラッパーが必要です。