【问题标题】:Cython equivalent for "using Time = cppClassDefinition<withT>"“使用 Time = cppClassDefinition<withT>”的 Cython 等效项
【发布时间】:2017-03-31 18:34:29
【问题描述】:

我正在尝试包装一个 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 吗?

【问题讨论】:

    标签: c++ cython cythonize


    【解决方案1】:

    正如您在问题中所建议的,您应该能够使用 use

    ctypedef cppClassDefinition[withT] Time
    

    因为using ... = ... 在这种情况下等同于typedef。 (请注意与您问题中的代码相比,方括号的更改)。

    我认为问题在于您尝试执行setDefaultTime(1.0)。 Cython 无法知道 double 可以转换为 Time 并且没有任何方法可以告诉它隐式 C++ 转换。

    解决这个问题的最简单方法是告诉 Cython 函数签名是

    void setDefaultTime(double x)
    

    (您可以保持 C++ 签名不变)。这将满足 Cython,然后它生成的 C++ 代码最终应该可以正常工作,前提是 double 可以隐式转换为 Time(正如问题所暗示的那样)

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2015-05-15
      • 2020-03-08
      • 2019-04-29
      • 2011-01-10
      相关资源
      最近更新 更多