Цель: я пытаюсь написать класс в Cython, который имитирует поведение словаря. Но вместо строк я хочу использовать в качестве ключей перечисление или другие определяемые пользователем типы.
Предыдущие исследования: на основе 1, 2 и 3 , похоже, я могу использовать шаблон в классах Cython. Но мне не удалось найти никакой другой документации по этому вопросу.
Мои попытки: Учитывая это, то, что я написал, представляет собой всего лишь простую модификацию класса Cython I. написал без шаблона, который гласит:
Код: Выделить всё
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 = malloc(self.__current_buffer_len*sizeof(T))
self.__values = 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...
Как правильно это сделать? Или это невозможно?
Подробнее здесь: https://stackoverflow.com/questions/793 ... h-template
Мобильная версия