如何使用 cython 将 python 对象暴露给 C++?我了解如何为函数完成它,但不确定这对于一个类是否可行。
本质上,我有一个用 cython 编写的数据结构,它必须由 C++ 填充。填充后,c++ 代码将调用 cython 方法并传递该对象。该方法中的 cython 代码应该能够访问对象的数据。
答案是使用“公共扩展类型”。
一个简单的例子是:
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)
Run Code Online (Sandbox Code Playgroud)
注意“ public class MyClass”。您还需要指定两个名称:一个是用于表示 的结构的名称MyClass,另一个是类型对象将具有的名称。
在其上运行 Cython 会生成一个包含以下内容的头文件(我只复制了有趣的部分)。
struct TheNameThisWillHaveInC {
PyObject_HEAD
int a;
int b;
};
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) TheNameTheTypeWillHaveInC;
Run Code Online (Sandbox Code Playgroud)
您只需将该头文件包含在 C++ 代码中即可。我给出的示例函数在 C++ 中如下所示:
void modifyMyClass(TheNameThisWillHaveInC* obj) {
obj->a = 5; // etc
}
Run Code Online (Sandbox Code Playgroud)
我认为使用 C++ 而不是 C 的事实不会有太大变化。您唯一需要做的就是在 C++ 模式下运行 Cython(指定语言setup.py以避免名称损坏问题。
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |