[英]Passing a struct* from one Cython class to another
我試圖將一個結構指針從一個 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 = 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)
當我嘗試編譯這個類時,我在my_struct = self.m.get_my_struct()
行周圍出現了這兩個錯誤:
無法將 Python 對象轉換為“MyStruct *”
和
存儲臨時 Python 引用的不安全 C 派生詞
為什么 Cython 試圖在這里進行轉換? 它不能按原樣傳遞指針嗎?
在PrinterClass
,用cdef MyClass m
替換cdef object m
或將self.m
顯式self.m
為MyClass
: my_struct = (<MyClass>self.m).get_my_struct()
。 (此外, __dealloc__
添加到MyClass
)。
我想區別在於該object
是一個 python 對象(本質上是dict
),而cdef class
是另一種類(本質上是struct
),請參閱擴展類型(又名 cdef 類) 。
期待其他專家的進一步啟示:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.