[PYTHON] Tutoriel Cython: Comment utiliser shared_ptr

Aperçu

Enveloppez le code C ++ dans cython pour qu'il puisse être appelé depuis python,

J'ai écrit diverses choses comme ça, Cette fois, je vais vous expliquer un peu comment écrire shared_ptr dans cython.

J'ai une petite habitude, mais une fois que je m'y suis habitué, ça va.

Structure du code

Comme d'habitude,

--Classes écrites en C ++ --Fonctions écrites en C ++

En enveloppant avec cython, il sera configuré pour pouvoir être appelé depuis python.

Ici, à titre d'exemple

--C ++ a une classe appelée Test_CPP. '' --C ++ Test_CPP a une méthode appelée test_function`

Je dirais.

Code réel

Peut-être est-il plus facile à comprendre en regardant le code qu'il n'est expliqué. Py_Test_CPP est la classe qui encapsule Test_CPP.

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

Importez ce dont vous avez besoin

Premier, J'importe parce que j'utilise dereference, shared_ptr, make_shared.

Comment faire référence aux objets du côté C ++

A ce moment, il était nécessaire de tenir le pointeur de l'objet de classe côté C ++ comme propriété, Cette fois, je l'écris comme cdef shared_ptr [Test_CPP] ptr et je le garde comme shared_ptr.

constructeur

Dans __cinit __ qui est le constructeur du côté cython, make_shared to self.ptr = make_shared [Test_CPP](arg1) En utilisant like, self.ptr du côté cython devient un pointeur partagé.

Appeler une fonction

À def test_function (self), j'emballe la fonction test_functiondu côtéC ++, Dans ce cas, accédez à l'entité en tant que deref (self.ptr) et appelez la fonction du côté C ++ à partir de là, et cela fonctionnera.

Résumé

Un mémorandum sur la façon d'écrire lors de l'utilisation de shared_ptr avec cython.

Cette fois par ici.

fin.

Recommended Posts

Tutoriel Cython: Comment utiliser shared_ptr
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment utiliser Pandas 2
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment utiliser pytest_report_header
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment utiliser Qt Designer
Comment utiliser la recherche triée
[gensim] Comment utiliser Doc2Vec
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser FastAPI ③ OpenAPI
Comment utiliser Python Argparse
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
[Note] Comment utiliser virtualenv
Comment utiliser les dictionnaires redis-py
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Aller] Comment utiliser "... (3 périodes)"
Comment faire fonctionner GeoIp2 de Django
[Python] Comment utiliser input ()
Comment utiliser le décorateur
[Introduction] Comment utiliser open3d
Comment utiliser Python lambda
Comment utiliser Jupyter Notebook
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser Google Colaboratory
Comment utiliser les octets Python
Comment utiliser cron (mémo personnel)