簡體   English   中英

將 struct* 從一個 Cython 類傳遞到另一個

[英]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.mMyClassmy_struct = (<MyClass>self.m).get_my_struct() (此外, __dealloc__添加到MyClass )。

我想區別在於該object是一個 python 對象(本質上是dict ),而cdef class是另一種類(本質上是struct ),請參閱擴展類型(又名 cdef 類)

期待其他專家的進一步啟示:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM