gpt4 book ai didi

python - 如何使用 cython 将 python 类公开给 C++

转载 作者:太空狗 更新时间:2023-10-29 21:16:19 25 4
gpt4 key购买 nike

如何使用 cython 将 python 对象公开给 C++?我了解如何为函数完成此操作,但不确定这对于类是否可行。

本质上,我有一个用 cython 编写的数据结构,必须由 C++ 填充。填充后,C++ 代码将调用 cython 方法并传递该对象。该方法中的 cython 代码应该能够访问对象的数据。

最佳答案

答案是使用"public extension types" .

一个简单的例子是:

cdef extern from "cpp_file.hpp":
void modifyMyClass(MyClass)

cdef public class MyClass [object TheNameThisWillHaveInC, type TheNameTheTypeWillHaveInC]:
cdef int a
cdef int b

def example():
cdef MyClass a = MyClass()
modifyMyClass(a)

注意“public class MyClass”。您还需要指定两个名称:一个是用于表示 MyClass 的结构的名称,另一个是类型对象将具有的名称。

在其上运行 Cython 会生成一个包含以下内容的头文件(我只复制了有趣的部分)。

struct TheNameThisWillHaveInC {
PyObject_HEAD
int a;
int b;
};

__PYX_EXTERN_C DL_IMPORT(PyTypeObject) TheNameTheTypeWillHaveInC;

您只需将该头文件包含在您的 C++ 代码中。我给出的示例函数在 C++ 中将如下所示:

void modifyMyClass(TheNameThisWillHaveInC* obj) {
obj->a = 5; // etc
}

我认为您使用 C++ 而不是 C 的事实没有太大变化。您唯一需要做的就是在 C++ 模式下运行 Cython(在 setup.py 中指定语言以避免名称混淆问题。

关于python - 如何使用 cython 将 python 类公开给 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35434771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com