2012-11-06 57 views
1

我正在嘗試將cpp庫包裝到cython中。這裏還有一些細節:Cython無法將Python對象轉換爲'處理*'

Handle.h

class Handle { 
    public: 
    // accessors 
    // mutators 
}; 

class Store { 
    public: 
     Handle* lookup(char* handleName); 
     int update(Handle*); 
}; 

handle.pyx

cdef extern from "Handle.h" namespace "xxx": 
    cdef cppclass Handle: 
     .... 

cdef extern from "Handle.h" namespace "xxx": 
    cdef cppclass Store: 
     Handle* lookup(char*) 
     int update(Handle*) 

cdef class PyHandle: 
    cdef Handle* handle 
     .... 

cdef class PyStore: 
    cdef Store* store 
    def __cinit__(self): 
     store = .... 
    def lookup(self, name): 
     handle = self.store.lookup(name) 
     pHandle = PyHandle() 
     pHandle.handle = handle 
     return pHandle 
    def update(self, h): 
     self.store.update(h.handle) 

最後一條語句是給我一個錯誤說Cannot convert Python object to 'Handle *'。我知道我缺少一些簡單的東西。如何將嵌入在Python對象中的Handle*傳遞給調用?

+0

爲 「H」 傳遞給更新(個體,h)爲Python對象而store.update()接受手柄*作爲參數。這就是cython所說的。您應該將python對象轉換爲Handle *手動使make是cdef並輸入h參數,或者使store.update()以python對象作爲參數。 –

+0

我們如何使python對象成爲Handle *?謝謝。 –

回答

0

顯式聲明的參數來處理:

def update(self, Handle h): 
     self.store.update(h.handle) 
+0

你可能會指PyHandle而不是Handle – jfs

相關問題