Computer >> Máy Tính >  >> Lập trình >> C ++

Làm thế nào để sử dụng đối tượng Python trong C ++?


Đây là một ví dụ trong đó một đối tượng Python đơn giản được bao bọc và nhúng. Chúng tôi đang sử dụng .c cho việc này, c ++ có các bước tương tự -

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')

Chúng tôi biên dịch với cython pycls.pyx (sử dụng --cplus cho c ++) để tạo tệp .c và .h chứa các khai báo nguồn và hàm tương ứng. Bây giờ chúng tôi tạo một tệp main.c khởi động Python và chúng tôi đã sẵn sàng để gọi các hàm này -

#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;
}

Biên dịch mã này với các cờ thích hợp (bạn có thể lấy từ python3.5-config của python-config [Py2]) -

gcc pycls.c main.c -L$(python3.5-config --cflags) -I$(python3.5-config --ldflags) -std=c99

sẽ tạo tệp thực thi của chúng tôi tương tác với đối tượng của chúng tôi -

./a.out
Data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Tất cả điều này đã được thực hiện bằng cách sử dụng Cython cùng với từ khóa public tạo tệp tiêu đề .h. Ngoài ra, chúng tôi có thể chỉ cần biên dịch một mô-đun python với Cython và tạo tiêu đề / xử lý bảng soạn sẵn bổ sung của chính chúng tôi.