如何在C++中使用Python对象?

如何在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 编译(使用 –cplus 用于 c++)生成一个 .c 和一个 .h 文件,分别包含源码和函数声明。我们现在创建一个 main.c 文件,启动 Python,准备调用这些函数 –

#include "Python.h"   // Python.h 总是首先被包括。
#include "pycls.h"    // 包括你的头文件。
int main(int argc, char *argv[]){
    Py_Initialize();   // 初始化 Python。
    PyInit_pycls();    // 初始化模块 (Py2 中为 initpycls();)
    PyObject *obj = createPyClass();
    for(int i=0; i<10; i++){
        addData(obj, i);
    }
    printf("%s\n", printCls(obj));
    Py_Finalize();
    return 0;
}

使用正确的标志进行编译(您可以从 python3.5-config 或 python-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 模块,并自己创建头文件/处理附加样板。

更多Python相关文章,请阅读:Python 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程