"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso expor uma interface C++ ao Python para implementação?

Como posso expor uma interface C++ ao Python para implementação?

Publicado em 19/11/2024
Navegar:535

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

Expondo uma interface C ao Python para implementação

Objetivo

Integrar implementações Python de uma interface C em um programa C existente, permitindo que implementações Python ser usado perfeitamente dentro do programa maior.

Definição de interface

Considere a seguinte definição de interface C:

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

Importando e estendendo a interface em Python

  1. Habilitar polimorfismo com SWIG:

    %module(directors="1") module
    
    %include "myif.h"
  2. Criar uma implementação Python:

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

Incorporando Python em C

  1. Inicializar Python (main.cc):

    Py_Initialize();
  2. Importe o módulo Python:

    PyObject *module = PyImport_Import(PyString_FromString("mycl"));
  3. Criar instância e executar função:

    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. Finalização:

    Py_Finalize();

Convertendo objeto Python em ponteiro C

  1. Expondo o tempo de execução SWIG:

    swig -Wall -c   -python -external-runtime runtime.h
  2. Recompilar 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. Ajudante Função para conversão:

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

Implementação final em main.cc

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

Seguindo essas etapas, é possível implementar com sucesso implementações Python de uma interface C e integrá-las perfeitamente em programas C maiores, proporcionando maior flexibilidade e extensibilidade.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3