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