Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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

소스 및 함수 선언을 각각 포함하는 .c 및 .h 파일을 생성하기 위해 cython pycls.pyx(C++의 경우 --cplus 사용)로 컴파일합니다. 이제 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 [Py2]의 python3.5-config에서 얻을 수 있음) −

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]

이 모든 작업은 .h 헤더 파일을 생성하는 public 키워드와 함께 Cython을 사용하여 수행되었습니다. 또는 Cython으로 파이썬 모듈을 컴파일하고 헤더를 생성하거나 추가 상용구를 직접 처리할 수 있습니다.