Эквивалент 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 (как следует из вопроса)

Другие вопросы по тегам