我有以下问题。我们需要将回调函数传递给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函数则需要某些包装器。