Exposing a C++ class instance to a python embedded interpreter

Я ищу простой способ передать экземпляр класса C++ встроенному интерпретатору python.

  • У меня есть библиотека C++. Эта библиотека обернута (пока с помощью swig) и я могу использовать ее из интерпретатора python
  • У меня есть главная программа на C++, которая инстанцирует класс Foo из моей библиотеки и встраивает интерпретатор python

Я хотел бы выставить мой экземпляр Foo из мира C++ в мир python (и видеть его как класс Foo).

Возможно ли это, если да, то как?

Я думаю, что это почти как в первом ответе : boost::python::ptr или использование PyInstance_New

Я полагаю, это означает, что я должен использовать boost.Python для обертывания моей библиотеки?

Моя единственная цель - манипулировать моим C++ экземпляром Foo во встроенном интерпретаторе python (не уверен, что это можно сделать с помощью предыдущего метода).

Надеюсь, я понятно объяснил, спасибо за помощь.

update

Спасибо за ваши ответы. На самом деле, я уже открыл свой класс Foo для python (с помощью swig).

Что я имею:

мой класс Foo:

class Foo{...};

моя обернутая библиотека (включая класс Foo) открыта для python: так что я могу запустить интерпретатор python и сделать что-то вроде этого:

import my_module
foo=my_modulde.Foo()

Что я хочу:

иметь главную программу на C++, которая встраивает интерпретатор python и манипулирует переменными мира C++.

int main(int argc, char **argv)
{
    Foo  foo;   // instanciates foo

    Py_Initialize();

    Py_Main(argc, argv); // starts the python interpreter
                         // and manipulates THE foo instance in it

    Py_Finalize();

    return 0;
}

Теперь понятнее? :)

19
задан Community 23 May 2017 в 12:26
поделиться