Эквивалент Cython для «использования Time = cppClassDefinition & lt; withT & gt;»

Я пытаюсь обернуть приложение 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 (как следует из вопроса)

1

Другие решения

Других решений пока нет …