Cython:为什么我可以在 pxd 文件中使用矢量?

Cython: Why can I use vector in pxd files?

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

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

Cython 对类型的包装有两个部分,例如 std:: vector:

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

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

在 Cython 中包装 std::array 有点挑战,因为 Cython 不能轻松处理数字模板参数。您可以在 Stack Overflow 和其他地方 (, ) 找到各种说服它工作的技巧,但其中 none 很棒。