Cython 相当于 "using Time = cppClassDefinition<withT>"

Cython equivalent for "using Time = cppClassDefinition<withT>"

本文关键字:lt gt withT 相当于 using Time Cython cppClassDefinition      更新时间:2023-10-16

我正在尝试包装一个 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) 时,它会抛出编译错误。错误指出"无法将类型'双精度'分配给'时间'。但是,在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(正如问题所暗示的那样(