C 인터페이스의 Python 구현을 기존 C 프로그램에 통합하여 Python 구현이 다음을 수행할 수 있도록 합니다. 더 큰 프로그램 내에서 원활하게 사용할 수 있습니다.
다음 C 인터페이스 정의를 고려하세요.
<code class="cpp">class myif { public: virtual float myfunc(float a) = 0; };</code>
SWIG로 다형성 활성화:
%module(directors="1") module %include "myif.h"
Python 구현 만들기:
<code class="python">import module class MyCl(module.myif): def __init__(self): module.myif.__init__(self) def myfunc(self, a): return a * 2.0</code>
Python(main.cc) 초기화:
<code class="cpp">Py_Initialize();</code>
Python 모듈 가져오기:
<code class="cpp">PyObject *module = PyImport_Import(PyString_FromString("mycl"));</code>
인스턴스 생성 및 함수 실행:
<code class="cpp">PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict); double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));</code>
완성:
<code class="cpp">Py_Finalize();</code>
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
변환을 위한 도우미 함수:
<code class="cpp">myif *python2interface(PyObject *obj) { ... }</code>
<code class="cpp">int main() { ... myif *inst = python2interface(instance); std::cout << inst->myfunc(input) << std::endl; ... }</code>
이 단계를 따르면 Python 구현을 성공적으로 구현할 수 있습니다. C 인터페이스를 사용하고 더 큰 C 프로그램에 원활하게 통합하여 더 큰 유연성과 확장성을 제공합니다.
위 내용은 구현을 위해 C 인터페이스를 Python에 어떻게 노출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!