Poszukuję prostego sposobu na ujawnienie instancji klasy C++ dla wbudowanego interpretera Pythona.Wystawianie instancji klasy C++ do interpretera osadzonego w pythonie
- Mam bibliotekę C++. Ta biblioteka jest owinięta (używając łyk za chwilę) i jestem w stanie go używać z interpretera Pythona
- Mam C++ program główny, który instanciates klasę Foo z mojej biblioteki i osadza interpreter Pythona
Chciałbym odsłonić moją instancję światową C++ Foo do świata Pythona (i postrzeganą jako klasa Foo).
Czy to możliwe, jeśli tak, w jaki sposób?
Myślę, że to prawie jak w pierwszej odpowiedzi na: boost::python::ptr or PyInstance_New usage
Myślę, że to oznacza, że należy używać boost.Python
zawinąć moją bibliotekę?
Moim jedynym celem jest manipulowanie moją instancją C++ Foo we wbudowanym interpreterze python (nie jestem pewien, czy można to zrobić za pomocą poprzedniej metody).
Mam nadzieję, że jestem jasny, dziękuję za pomoc.
aktualizacja
Dzięki za odpowiedzi. W rzeczywistości, już wystawiłem moją klasę Foo na pythona (z swigiem).
Co mam:
moja klasa Foo:
class Foo{...};
mój zawinięte biblioteki (w tym klasy Foo) narażone na pytona: więc mogę uruchomić interpreter Pythona i zrób coś takiego:
import my_module
foo=my_modulde.Foo()
Co chcę:
Posiadanie programu głównego C++, który osadza interpretera python i manipuluje zmiennymi światowymi 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;
}
Czy to jasne? :)
Dzięki za odpowiedź, I rozważy również boost.Python. Byłem już świadomy możliwości boost.Python do ujawnienia klas C++, ale mam dużo starszego kodu do zawijania. Więc to wygląda na lepsze rozwiązanie (szybciej, bardziej proste i więcej celów językowych) ... :( Znalazłem jedną ze starych odpowiedzi [tutaj] (http://stackoverflow.com/q/3378195/1044695) .To wciąż jest niejasne :) ale czuję, że tego właśnie szukam (nie tylko dla jednej instancji, ale idea globalna jest tutaj)? Miałem nadzieję, że to zrobię z apką świst i pytona? :( – jineff
Dodałem przykład próbujący odpowiedzieć na twoje dokładne pytanie z boost :: python - boję się, że nie mogę pomóc z łykiem – James
Wielkie dzięki! Dokładnie to, czego chcę (z wyjątkiem boost.python). wspomniałem twoją odpowiedź jako użyteczną (bardzo przydatna). Poczekaj chwilę na inne odpowiedzi (szczególnie dotyczące łykania) i przyjrzyj się dokładniej Twojemu rozwiązaniu. – jineff