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*
傳遞給調用?
爲 「H」 傳遞給更新(個體,h)爲Python對象而store.update()接受手柄*作爲參數。這就是cython所說的。您應該將python對象轉換爲Handle *手動使make是cdef並輸入h參數,或者使store.update()以python對象作爲參數。 –
我們如何使python對象成爲Handle *?謝謝。 –