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.
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.
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()
Premier,
J'importe parce que j'utilise dereference, shared_ptr, make_shared.
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.
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é.
À 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.
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