Определение перечислений в коде Cython, которые будут использоваться в части кода C - PullRequest
2 голосов
/ 18 февраля 2012

Я определил и enum в заголовочном файле Cython api.pxd:

ctypedef enum InstructionType:
    default = 0
    end_if = 1
    end_loop = 2
    backward_jump_here = 4

Я также проверил, сработало ли превращение ctypedef в cdef (а это не так).

И я хочу использовать значение из этого перечисления в __cinit__ методе для некоторого класса:

from api cimport Instruction, CLinVM, InstructionType

# (...) some other classes

cdef class EndIf(Noop):
   def __cinit__(self):
      self.type = InstructionType.end_if

И я получаю ошибку компиляции:

    self.type = InstructionType.end_if
                              ^
------------------------------------------------------------
 /home/(...)/instructions.pyx:149:35: 'InstructionType' is not a constant, 

В любом случаеопределить и использовать enum таким образом?

1 Ответ

2 голосов
/ 18 февраля 2012

Вы не можете получить доступ к перечисляемым константам через их имя типа, к которому они принадлежат, ни в C, ни в C ++, ни в Cython.Для этого вам нужно создать упаковщик .pxd .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...