如何在Cython中编写带模板的类以实现自定义键类型的字典?
如何在Cython中编写带模板的类以实现自定义键类型的字典?
Background
我刚接触Cython,而且没有C使用经验。我了解C的模板特性,但不太清楚如何正确编写C++类。
Objective
我想在Cython中编写一个模仿字典行为的类,但我不想用字符串作为键,而是想用枚举或其他用户定义类型作为键。
Previous Research
根据一些资料,看起来可以在Cython类中使用模板,但我找不到更多相关文档。
My Attempts
基于这些信息,我只是对之前写的不带模板的Cython类做了简单修改,代码如下:
cdef class ScalarDict[T]: cdef: public long N public long ndata size_t size long __current_buffer_len T * __keys double ** __values def __cinit__(self, long ndata, long N=4): cdef long i self.__current_buffer_len = N self.N = 0 self.ndata = ndata self.size = ndata*sizeof(double) self.__keys = <T *>malloc(self.__current_buffer_len*sizeof(T)) self.__values = <double **>malloc(self.__current_buffer_len*sizeof(double *)) def __dealloc__(self): cdef long i if self.N > 0: for i in range(self.N): if self.__values[i] != NULL: free(self.__values[i]) if self.__values != NULL: free(self.__values) if self.__keys != NULL: free(self.__keys) # other methods...
但这段代码编译失败,错误信息包括Name options only allowed for 'public', 'api', or 'extern' C class,以及在cdef class ScalarDict[T]:这一行出现的Expected 'object', 'type' or 'check_size'。
正确的做法是什么?或者说这根本不可能实现?
备注:内容来源于stack exchange,提问作者Hojin Cho
相关产品推荐
相关产品推荐

