You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:39:31