Написание класса Cython с помощью шаблона?Python

Программы на Python
Ответить
Anonymous
 Написание класса Cython с помощью шаблона?

Сообщение Anonymous »

Общая информация. Я новичок в Cython и не имею опыта работы с C++. Мне известна функция шаблонов C++, и я не совсем понимаю, как написать правильный класс на C++.
Цель: я пытаюсь написать класс в 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...
Но это не скомпилируется: сообщения об ошибках, включая параметры имени, разрешены только для класса C «public», «api» или «extern» и ожидаемого «объекта», 'type' или 'check_size' в строке с классом cdef ScalarDict[T]:.
Как правильно это сделать? Или это невозможно?

Подробнее здесь: https://stackoverflow.com/questions/793 ... h-template
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»