"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je exposer une interface C++ à Python pour l'implémentation ?

Comment puis-je exposer une interface C++ à Python pour l'implémentation ?

Publié le 2024-11-19
Parcourir:691

How can I expose a C   interface to Python for implementation?

Exposer une interface C à Python pour l'implémentation

Objectif

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.

Définition de l'interface

Considérez l'interface C suivante définition :

class myif {
public:
  virtual float myfunc(float a) = 0;
};

Importation et extension de l'interface en Python

  1. Activer le polymorphisme avec SWIG :

    %module(directors="1") module
    
    %include "myif.h"
  2. 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

Intégration de Python en C

  1. Initialiser Python (main.cc) :

    Py_Initialize();
  2. Importer le Python Module :

    PyObject *module = PyImport_Import(PyString_FromString("mycl"));
  3. 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)));
  4. Finalisation :

    Py_Finalize();

Conversion d'un objet Python en pointeur C

  1. Exposition de SWIG Runtime :

    swig -Wall -c   -python -external-runtime runtime.h
  2. 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
  3. Fonction d'aide pour la conversion :

    myif *python2interface(PyObject *obj) {
      ...
    }

Implémentation finale dans main.cc

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é.

Dernier tutoriel Plus>

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