Python 将结构*从一个Cython类传递到另一个Cython类
我试图将结构指针从一个Cython类传递到另一个Cython类。下面是一些示例代码:Python 将结构*从一个Cython类传递到另一个Cython类,python,cython,Python,Cython,我试图将结构指针从一个Cython类传递到另一个Cython类。下面是一些示例代码: cdef struct MyStruct: int a int b cdef class MyClass: cdef MyStruct* s def __init__(self): self.s = <MyStruct*> malloc(sizeof(MyStruct)) self.s.a = 1 self.s.b =
cdef struct MyStruct:
int a
int b
cdef class MyClass:
cdef MyStruct* s
def __init__(self):
self.s = <MyStruct*> malloc(sizeof(MyStruct))
self.s.a = 1
self.s.b = 2
cdef MyStruct* get_my_struct(self):
return self.s
cdef class PrinterClass:
cdef object m
def __init__(self):
self.m = MyClass()
cpdef print_struct(self):
cdef MyStruct* my_struct
my_struct = self.m.get_my_struct()
print(my_struct.a)
cdef struct MyStruct:
INTA
int b
cdef类MyClass:
cdef MyStruct*s
定义初始化(自):
self.s=malloc(sizeof(MyStruct))
self.s.a=1
self.s.b=2
cdef MyStruct*获取我的结构(self):
回归自我
cdef类打印机类:
cdef对象m
定义初始化(自):
self.m=MyClass()
cpdef打印结构(自身):
cdef MyStruct*我的结构
my_struct=self.m.获取my_struct()
打印(我的结构a)
当我试图编译这个类时,在my\u struct=self.m.get\u my\u struct()
行中出现以下两个错误:
无法将Python对象转换为“MyStruct”*
及
存储临时Python引用的不安全C派生
为什么Cython要在这里进行转换?它不能按原样传递指针吗?在
PrinterClass
中,用cdef MyClass m
替换cdef对象m
,或者显式地将self.m
转换为MyClass
:my_struct=(self.m)。获取my_struct()
。(此外,应在MyClass
中添加一个\uuuuu dealloc\uuuuuu
)
我想区别在于object
是python对象(本质上是dict
),而cdefclass
是另一种类(本质上是struct
),请参见
期待其他专家的进一步披露:)