2016-11-22 3 views
3

Ich habe C++ Programm und ich möchte Erweiterung System mit Python hinzufügen. Aber um dies zu erreichen, muss ich Python-Objektmethodenaufrufe C++ - Methodenaufrufen zuordnen. Ist das möglich und wenn ja wie zu erreichen?C++ und Python eng integrierende

Beispiel:
Python-Teil:

class Extension(AbstractExtension): 
    def __init__(self, cool_cpp_object): 
     self.o = cool_cpp_object 

    def some_method(self): 
     self.o.method_to_cpp() 

C++ Teil:

class SomeClass : public AnotherClass 
{ 
public: 
    void method_to_cpp(); 
} 

Ich habe Someclass Instanz Verlängerungs Instanzmethode zu übergeben. Vielen Dank.

+2

Geben Sie [Boost.Python] (http://www.boost.org/doc/libs/1_62_0/libs/python/doc/html/tutorial/tutorial/exposing.html#tutorial.exposing.constructors) ein Go – StoryTeller

Antwort

3

Es gibt mehrere Möglichkeiten, dies zu tun (StoryTeller merkt Boost :: Python korrekt, und es gibt auch Swig). Persönlich finde ich Cython's C++ integration außergewöhnlich einfach zu bedienen.

eine Header-Datei erstellen, sagen classes.hpp, und in sie (zusammen mit Wachen usw.):

class SomeClass : public AnotherClass 
{ 
public: 
    void method_to_cpp(); 
} 

Ort die Umsetzung in einer der üblichen Art und Weise Implementierungsdatei.

Jetzt Cython Datei mit einem Export der Schnittstelle erstellen Sie verwenden:

cdef extern from "classes.hpp": 
cdef cppclass SomeClass: 
    method_to_cpp() 

und ein Python-Wrapper:

cdef class PySomeClass: 
    cdef SomeClass obj 

    def method(self): 
     self.obj.method_to_cpp() 

Das ist es, im Grunde. Sie können PySomeClass wie eine normale Python-Klasse importieren und verwenden.

Der Link oben sollte erklären, wie Sie alle Dateien erstellen.

+0

Ok, ich habe den Link überlesen, und es ist wirklich sehr einfach, C++ in Python zu integrieren, aber ich habe immer noch nicht verstanden, wie man bereits erstelltes C++ - Objekt an Python übergibt. – Megaxela

+2

@Megaxela Es ist ein (Cython) Mitglied von 'PySomeClass', das Sie wie ein normales Python-Objekt weitergeben können. Der andere Python-Code kann Member von 'PySomeClass' aufrufen, und seine Member können die Methoden des C++ - Objekts aufrufen. –

Verwandte Themen