既に割り当てられて初期化されている構造体からのデータがいくつかあります。これらのオブジェクトの有効期間中にデータが解放されないことを保証できます。これを Cython の Python オブジェクトにラップするにはどうすればよいですか? 以下は機能しませんが、私の意図を説明してくれることを願っています:
from libc.stdlib cimport malloc
ctypedef struct Point:
int x
int y
cdef class _MyWrapper:
cdef Point* foo
def __cinit__(self, Point* foo):
self.foo = foo
def create_eternal_MyWrapper(int x, int y):
cdef Point* p
p = <Point*>malloc(sizeof(Point))
p.x = x
p.y = y
return _MyWrapper(p)
これで cython を実行した場合の出力:
Error compiling Cython file:
------------------------------------------------------------
...
def create_eternal_MyWrapper(int x, int y):
cdef Point* p
p = <Point*>malloc(sizeof(Point))
p.x = x
p.y = y
return _MyWrapper(p)
^
------------------------------------------------------------
examplecy.pyx:17:23: Cannot convert 'Point *' to Python object