Intégrer les implémentations Python d'une interface C dans un programme C existant, permettant aux implémentations Python de être utilisé de manière transparente dans le programme plus large.
Considérez le C suivant définition de l'interface :
<code class="cpp">class myif { public: virtual float myfunc(float a) = 0; };</code>
Activer le polymorphisme avec SWIG :
%module(directors="1") module %include "myif.h"
Créer un Python Implémentation :
<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>
Initialiser Python (main.cc) :
<code class="cpp">Py_Initialize();</code>
Importer le Python Module :
<code class="cpp">PyObject *module = PyImport_Import(PyString_FromString("mycl"));</code>
Créer une instance et exécuter Fonction :
<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>
Finalisation :
<code class="cpp">Py_Finalize();</code>
Exposer SWIG Runtime :
swig -Wall -c++ -python -external-runtime runtime.h
Recompiler le module SWIG :
g++ -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
Fonction d'assistance pour Conversion :
<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>
En suivant ces étapes, on peut implémenter avec succès les implémentations Python d'une interface C et intégrez-les de manière transparente dans des programmes C plus vastes, offrant ainsi une plus grande flexibilité et extensibilité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!