0
我有这样一个用Cython功能用Cython功能:ctypedef使用默认参数
cdef void foo(int a, int b=1, int c=2):
pass
和getter函数返回其地址:
def get_foo():
return <size_t>foo
这样我就可以得到功能foo
的地址某处并将其转换回cython中的真实函数(例如:可以在python中使用的回调函数)。
问题是如何编写这样的类型?
我想:
cdef void foo(int a, int b=1, int c=2):
pass
ctypedef void (*foo_type)(int a, int b, int c)
cdef foo_type f = foo
这不会编译,用Cython抱怨:不能类型 '无效(INT,结构__pyx_opt_args_46_cython_magic_49f265438c694830523a60bef4fe2ee8_foo * __ pyx_optional_args)' 分配给 'foo_type'
从错误mesage,可以注意到,选项(默认)参数被cython封装在一个结构中。
有没有办法在cython中做这样的ctypedef?如果不是这样,我想我应该离开了默认值:-(
感谢您的回答,这是一个可行的办法。最后,我想出了函数指针不能提供的默认参数,并且这个类型没有考虑默认参数,这实际上是c/C++部分的一个问题。我有一个带有很多参数的函数,其中大部分都有一个默认值,为了方便起见,添加这么多的包装器会很枯燥,因此在c/cython部分中省略默认值并将其留给python部分对我来说会更好毕竟,它是一个python扩展名:-D – oz1