Эквивалент Cython для "using Time = cppClassDefinition<withT>"
Я пытаюсь обернуть приложение 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?
1 ответ
Как вы предлагаете в вопросе, вы должны быть в состоянии использовать
ctypedef cppClassDefinition[withT] Time
поскольку using ... = ...
в этом контексте эквивалентно typedef
, (Обратите внимание на изменение в квадратных скобках по сравнению с кодом в вашем вопросе).
Я думаю, что проблема вместо этого с вашей попыткой сделать setDefaultTime(1.0)
, Cython не может знать, что double
может быть преобразован в Time
и нет никакого способа сказать это о неявных преобразованиях C++.
Самый простой способ обойти это, просто сказать Cython, что сигнатура функции
void setDefaultTime(double x)
(Вы можете оставить подпись C++ как есть). Это удовлетворит Cython, и тогда генерируемый им код C++ должен работать правильно при условии, что double
может быть неявно преобразовано в Time
(как следует из вопроса)