Wickeln Sie den C ++ - Code in "Cython" ein, damit er von "Python" aufgerufen werden kann.
Ich habe verschiedene solche Dinge geschrieben, Dieses Mal werde ich ein wenig erklären, wie man "shared_ptr" in "cython" schreibt.
Ich habe eine kleine Angewohnheit, aber sobald ich mich daran gewöhnt habe, ist es okay.
Wie gewöhnlich,
C ++
geschriebene KlassenC ++
geschriebene FunktionenDurch das Umschließen mit "Cython" wird es so konfiguriert, dass es von "Python" aufgerufen werden kann.
Hier als Beispiel
--C ++ hat eine Klasse namens Test_CPP. `` --
C ++ Test_CPP hat eine Methode namens test_function`
Ich werde sagen.
Es ist wahrscheinlich einfacher zu verstehen, wenn man sich den Code ansieht, als er erklärt wird. "Py_Test_CPP" ist die Klasse, die "Test_CPP" umschließt.
test.pyx
from cython.operator cimport dereference as deref
from libcpp.memory cimport shared_ptr, make_shared
cdef class Py_Test_CPP:
cdef shared_ptr[Test_CPP] ptr
def __cinit__(self, int arg1):
self.ptr = make_shared[Test_CPP](arg1)
def test_function(self):
return deref(self.ptr).test_function()
Zuerst,
Ich importiere, weil ich dereference
, shared_ptr, make_shared
verwende.
Zu diesem Zeitpunkt war es notwendig, den Zeiger des Klassenobjekts auf der C ++ - Seite als Eigenschaft zu halten. Dieses Mal schreibe ich es als "cdef shared_ptr [Test_CPP] ptr" und behalte es als "shared_ptr".
In __cinit __
, welches der Konstruktor auf der
Cython-Seite ist,
make_shared
to self.ptr = make_shared [Test_CPP](arg1)
Durch die Verwendung von like wird self.ptr auf der "Cython-Seite" zu einem gemeinsamen Zeiger.
Bei def test_function (self)
wickle ich die Funktion test_functionauf die
C ++ Seite,
In diesem Fall greifen Sie auf die Entität als "deref (self.ptr)" zu und rufen Sie die Funktion auf der "C ++ - Seite von dort" auf, und es wird funktionieren.
Ein Memorandum zum Schreiben bei Verwendung von "shared_ptr" mit "cython".
Diesmal hier.
Ende.
Recommended Posts