4
我有一些已經分配和初始化的結構數據。 我可以保證在任何這些對象生命週期中數據都不會被釋放。我如何將它封裝在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
什麼是MyAllocatedData?一個C結構? 'cdef類'?一種Python對象? – delnan 2013-03-08 18:56:05
C類型。具體來說,一個結構。你想在C和Cython中確切的結構定義嗎? – 2013-03-08 18:57:24
我不認爲這些細節很重要。但*如何*它「不起作用」?你能提供一個[更好](http://sscce.org/)的例子嗎? – delnan 2013-03-08 19:14:14