【问题标题】:Cython: Why can I use vector in pxd files?Cython:为什么我可以在 pxd 文件中使用矢量?
【发布时间】:2021-02-28 03:09:33
【问题描述】:

当我想使用 .pxd 和 .pyx 文件在 Python 中使用我的 C++ 代码时,我可以在 pxd 文件中导入 libcpp.vector 后使用 vector。是否可以编写自己的 C++ 类并在使用矢量的 pxd 文件中使用它们(例如使用 std::array)?

一方面,libcpp 似乎只包含矢量的 pxd 文件,而另一方面,cython 编译器在处理矢量时似乎做了一些额外的技巧。

【问题讨论】:

    标签: python c++ cython


    【解决方案1】:

    Cython 对 std:: vector 等类型的包装分为两部分:

    1. 它为您定义的 .pxd 文件到 cimport(例如 https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/vector.pxd)。这些是为了您的方便而提供的(以节省每个人重写相同文件的工作量)。它们使用标准 Cython 语法,您可以创建类似的文件来包装其他类。

    2. 与 Python 类型 documented here 的自动转换。这是 Cython 内置的,您不能将其应用于您包装的其他类型。不过,这不应阻止您创建可用的包装 - 您可能只需要在 Python/C++ 接口处手动复制更多数据。

    在 Cython 中包装 std::array 有点挑战性,因为 Cython 无法轻松处理数字模板参数。您可以在 Stack Overflow 和其他地方(Interfacing C++11 array with Cython、Wrapping std::array in Cython and Exposing it to memory views)上找到各种技巧来说服它工作,但都不是很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多