[PYTHON] Cython Tutorial: Verwendung von shared_ptr

Überblick

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.

Codestruktur

Wie gewöhnlich,

Durch 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.

Tatsächlicher Code

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()

Importieren Sie, was Sie brauchen

Zuerst, Ich importiere, weil ich dereference , shared_ptr, make_shared verwende.

Verweisen auf Objekte auf der C ++ - Seite

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".

Konstrukteur

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.

Rufen Sie eine Funktion auf

Bei def test_function (self) wickle ich die Funktion test_functionauf dieC ++ 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.

Zusammenfassung

Ein Memorandum zum Schreiben bei Verwendung von "shared_ptr" mit "cython".

Diesmal hier.

Ende.

Recommended Posts

Cython Tutorial: Verwendung von shared_ptr
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Verwendung von Qt Designer
Verwendung der Suche sortiert
[gensim] Verwendung von Doc2Vec
python3: Verwendung der Flasche (2)
Verstehen Sie, wie man Django-Filter verwendet
Verwendung des Generators
[Python] Verwendung von Liste 1
Verwendung von FastAPI ③ OpenAPI
Wie benutzt man Python Argparse?
Verwendung von IPython Notebook
Wie man Pandas Rolling benutzt
[Hinweis] Verwendung von virtualenv
Verwendung von Redispy-Wörterbüchern
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Go] Verwendung von "... (3 Perioden)"
So bedienen Sie GeoIp2 von Django
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
[Einführung] Verwendung von open3d
Wie benutzt man Python Lambda?
So verwenden Sie Jupyter Notebook
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
So verwenden Sie Google Colaboratory
Verwendung von Python-Bytes
Verwendung von cron (persönliches Memo)