"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo exponer una interfaz C++ a Python para su implementación?

¿Cómo puedo exponer una interfaz C++ a Python para su implementación?

Publicado el 2024-11-19
Navegar:259

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

Exponer una interfaz C a Python para su implementación

Objetivo

Integrar implementaciones Python de una interfaz C en un programa C existente, permitiendo que las implementaciones Python usarse sin problemas dentro del programa más grande.

Definición de interfaz

Considere la siguiente definición de interfaz C:

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

Importación y extensión de la interfaz en Python

  1. Habilitar polimorfismo con SWIG:

    %module(directors="1") module
    
    %include "myif.h"
  2. Crear una implementación de Python:

    import module
    
    class MyCl(module.myif):
      def __init__(self):
        module.myif.__init__(self)
      def myfunc(self, a):
        return a * 2.0

Incrustar Python en C

  1. Inicializar Python (main.cc):

    Py_Initialize();
  2. Importar el módulo Python:

    PyObject *module = PyImport_Import(PyString_FromString("mycl"));
  3. Crear instancia y ejecutar función:

    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. Finalización:

    Py_Finalize();

Conversión de objeto Python en puntero C

  1. Exposición del tiempo de ejecución SWIG:

    swig -Wall -c   -python -external-runtime runtime.h
  2. Recompilar el módulo SWIG:

    g   -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
  3. Ayudante Función para la conversión:

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

Implementación final en main.cc

int main() {
  ...
  myif *inst = python2interface(instance);
  std::cout myfunc(input) 

Al seguir estos pasos, se pueden implementar con éxito implementaciones Python de una interfaz C e integrarlas perfectamente en programas C más grandes, proporcionando mayor flexibilidad y extensibilidad.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3