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