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 vaste.
Considérez l'interface C suivante définition :
class myif {
public:
virtual float myfunc(float a) = 0;
};
Activer le polymorphisme avec SWIG :
%module(directors="1") module %include "myif.h"
Créer une implémentation Python :
import module
class MyCl(module.myif):
def __init__(self):
module.myif.__init__(self)
def myfunc(self, a):
return a * 2.0
Initialiser Python (main.cc) :
Py_Initialize();
Importer le Python Module :
PyObject *module = PyImport_Import(PyString_FromString("mycl"));
Créer une instance et exécuter une fonction :
PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
Finalisation :
Py_Finalize();
Exposition de 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'aide pour la conversion :
myif *python2interface(PyObject *obj) {
...
}
int main() {
...
myif *inst = python2interface(instance);
std::cout myfunc(input) En suivant ces étapes, on peut implémenter avec succès des implémentations Python d'une interface C et les intégrer de manière transparente dans des programmes C plus grands, offrant ainsi une plus grande flexibilité et extensibilité.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3