C 인터페이스의 Python 구현을 기존 C 프로그램에 통합하여 Python 구현이 다음을 수행할 수 있도록 합니다. 더 큰 프로그램 내에서 원활하게 사용됩니다.
다음 C 인터페이스 정의를 고려하십시오.
class myif {
public:
virtual float myfunc(float a) = 0;
};
SWIG로 다형성 활성화:
%module(directors="1") module %include "myif.h"
Python 구현 생성:
import module
class MyCl(module.myif):
def __init__(self):
module.myif.__init__(self)
def myfunc(self, a):
return a * 2.0
Python 초기화(main.cc):
Py_Initialize();
Python 모듈 가져오기:
PyObject *module = PyImport_Import(PyString_FromString("mycl"));
인스턴스를 생성하고 함수 실행:
PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
완료:
Py_Finalize();
SWIG 런타임 노출:
swig -Wall -c -python -external-runtime runtime.h
SWIG 모듈 재컴파일:
g -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
Helper 변환 함수:
myif *python2interface(PyObject *obj) {
...
}
int main() {
...
myif *inst = python2interface(instance);
std::cout myfunc(input) 이러한 단계를 따르면 C 인터페이스의 Python 구현을 성공적으로 구현하고 더 큰 C 프로그램에 원활하게 통합하여 더 큰 유연성과 확장성을 제공할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3