使用Cython封装C++函数模板时遭遇语法错误的解决方案求助
Cython封装C++函数模板时遭遇语法错误的解决方案求助
我在.cpp文件中定义了一个C++模板函数:
template <typename T> void rank_filter(T* in, T* out, int arr_len, int win_len, int order, Mode mode, T cval, int origin)
其中Mode是一个枚举类型。
我尝试用Cython来封装这个函数,编写的.pyx文件内容如下:
cimport cython cimport numpy as np ctypedef fused numeric_t: np.float32_t np.float64_t np.int32_t np.int64_t @cython.boundscheck(False) # 关闭边界检查 @cython.wraparound(False) # 关闭负索引支持 cdef extern from "_rank_filter_1d.cpp" nogil: void rank_filter[T](T* in, T* out, int arr_len, int win_len, int order, Mode mode, T cval, int origin) def rank_filter_1d(numeric_t[:] in_arr, numeric_t[:] out_arr, int win_len, int order, int mode, numeric_t cval, int origin): rank_filter(&in_arr[0], &out_arr[0], in_arr.shape[0], win_len, order, mode, cval, origin) return out_arr
但在终端运行python setup.py build_ext --inplace时出现了错误,错误信息如下:
cdef extern from "_rank_filter_1d.cpp" nogil: void rank_filter[T](T* in, T* out, int arr_len, int win_len, int order, Mode mode, T cval, int origin) ^ ------------------------------------------------------------ rank_filter_1d_cython.pyx:13:27: Expected ')', found 'in'
我之前试过在void前添加cdef关键字,但并没有解决问题。有没有其他的解决思路或方法呢?
备注:内容来源于stack exchange,提问作者Gideon Kogan
相关产品推荐
相关产品推荐

