«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу предоставить интерфейс C++ для Python для реализации?

Как я могу предоставить интерфейс C++ для Python для реализации?

Опубликовано 19 ноября 2024 г.
Просматривать:880

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

Предоставление интерфейса C для Python для реализации

Цель

Интегрировать реализации интерфейса C на Python в существующую программу на C, позволяя реализациям Python можно беспрепятственно использовать в более крупной программе.

Определение интерфейса

Рассмотрим следующее определение интерфейса C:

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

Импорт и расширение интерфейса в Python

  1. Включите полиморфизм с помощью SWIG:

    %module(directors="1") module
    
    %include "myif.h"
  2. Создание реализации Python:

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

Встраивание Python в C

  1. Инициализировать Python (main.cc):

    Py_Initialize();
  2. Импортируйте модуль Python:

    PyObject *module = PyImport_Import(PyString_FromString("mycl"));
  3. Создать экземпляр и выполнить функцию:

    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. Финализация:

    Py_Finalize();

Преобразование объекта Python в указатель C

  1. Раскрытие среды выполнения SWIG:

    swig -Wall -c   -python -external-runtime runtime.h
  2. Перекомпилировать модуль SWIG:

    g   -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
  3. Помощник Функция для преобразования:

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

Окончательная реализация в main.cc

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

Следуя этим шагам, можно успешно реализовать реализации интерфейса C на Python и легко интегрировать их в более крупные программы на C, обеспечивая большую гибкость и расширяемость.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3