2016-11-30 36 views
0

在實現我的python集成過程中,我遇到了一個問題。 我有課,看起來像這樣:從python方法訪問python類中的c指針,cython

cdef class SomeClass: 
    cdef CPPClass* cpp_impl 

    def some_method(self): 
     self.cpp_impl.cppMethod() 

我有CPP類,它可以返回CPPClass*值。水木清華這樣的:

class Creator 
{ 
public: 
    CPPClass* createClass(); 

} 

所以我想創建SomeClass的實例是這樣的:

cdef class PyCreator: 
    cdef Creator* cpp_impl 

    def getSomeClass(self): 
     o = SomeClass() 
     o.cpp_impl = self.cpp_impl.createClass() 
     return o 

但我發現了錯誤並用Cython不能轉換CPPClass*到Python對象。 我該如何解決我的問題?謝謝。

回答

1

getSomeClass它需要知道是什麼類型的o使分配給cpp_impl是有道理的:

def getSomeClass(self): 
    cdef SomeClass o = SomeClass() # define the type 
    o.cpp_impl = self.cpp_impl.createClass() # I think you missed a "self" here 
    return o 
+0

感謝您的答覆。你們,我編輯了我的答案,因爲我忘了用'自我'這個詞,但這不是我的問題。我的問題是,我無法訪問python方法的指針。 – Megaxela

+0

......這就是'cdef SomeClass o = ...'應該做的。然後它知道'o.cpp_impl'是'CPPClass'指針,所以應該工作 – DavidW