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