如何在 C++ 中使用 Python 对象?
以下是一个简单 Python 对象被封装和嵌入的示例。我们使用 .c 来实现,c++ 的步骤类似 −
class PyClass(object): def __init__(self): self.data = [] def add(self, val): self.data.append(val) def __str__(self): return "Data: " + str(self.data) cdef public object createPyClass(): return PyClass() cdef public void addData(object p, int val): p.add(val) cdef public char* printCls(object p): return bytes(str(p), encoding = 'utf-8')
我们使用 cython pycls.pyx(对于 c++ 使用 --cplus)进行编译,以分别生成包含源代码和函数声明的 .c 和 .h 文件。现在,我们创建一个启动 Python 的 main.c 文件,然后就可以调用这些函数了 −
#include "Python.h" // Python.h always gets included first. #include "pycls.h" // Include your header file. int main(int argc, char *argv[]){ Py_Initialize(); // initialize Python PyInit_pycls(); // initialize module (initpycls(); in Py2) PyObject *obj = createPyClass(); for(int i=0; i<10; i++){ addData(obj, i); } printf("%s\n", printCls(obj)); Py_Finalize(); return 0; }
使用适当的标志(你可以从 python-config 中获得 python3.5-config [Py2])进行编译,
gcc pycls.c main.c -L$(python3.5-config --cflags) -I$(python3.5-config --ldflags) -std=c99
将会创建与我们的对象进行交互的可执行文件 −
./a.out Data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
所有这些都是通过使用 Cython 及其生成 .h 头文件的白关键字实现的。我们也可以只使用 Cython 编译一个 Python 模块,然后自己创建头文件/处理额外的样板代码。
广告