Я пытаюсь обернуть приложение cpp и исходный код содержит следующее в заголовочном файле
using Time = cppClassDefinition<withT>
...
void setDefaultTime(Time x)
Что будет эквивалентным Cython для этого?
я пробовал
cdef extern from "headerfile.h" namespace "ns":
ctypedef cppClassDefinition<withT> Time
безуспешно Хотя Cython не жалуется на этом этапе, он выдает ошибку компиляции, когда я пытаюсь использовать функцию setDefaultTime(1.0)
, В сообщении об ошибке говорится: «Невозможно назначить тип« double »для« Time ». Однако в коде CPP это работает нормально.
Я также пытался
cdef extern from "headerfile.h" namespace "ns":
cdef cppclass Time:
pass
и это тоже не удалось. Какие-либо предложения? Возможно ли это с помощью Cython?
Как вы предлагаете в вопросе, вы должны быть в состоянии использовать
ctypedef cppClassDefinition[withT] Time
поскольку using ... = ...
в этом контексте эквивалентно typedef
, (Обратите внимание на изменение в квадратных скобках по сравнению с кодом в вашем вопросе).
Я думаю, что проблема вместо этого с вашей попыткой сделать setDefaultTime(1.0)
, Cython не может знать, что double
может быть преобразован в Time
и нет никакого способа сказать это о неявных преобразованиях C ++.
Самый простой способ обойти это, просто сказать Cython, что сигнатура функции
void setDefaultTime(double x)
(Вы можете оставить подпись C ++ как есть). Это удовлетворит Cython, и тогда генерируемый им код C ++ должен работать правильно при условии, что double
может быть неявно преобразовано в Time
(как следует из вопроса)
Других решений пока нет …