cdef extern from "Foo.h":
cdef cppclass Bar:
pass
cdef class PyClass:
cdef Bar *bar
def __cinit__(self, Bar *b)
bar = b
में तर्क के रूप में ++ सूचक यह मुझे हमेशा की तरह कुछ दे देंगे:
Cannot convert Python object argument to type 'Bar *'
पासिंग सी Cython समारोह
वहाँ यह पूरा करने के लिए एक रास्ता है, या मैं एक Bar
वस्तु से सब-की जरूरत है, बनाने एक पाइथन समकक्ष, इसे पास करें, फिर इसे PyClass
में पुनर्निर्माण करें?
cdef object CreatePyResponse(CefRefPtr[CefResponse] cefResponse):
pyResponse = PyResponse()
pyResponse.cefResponse = cefResponse
return pyResponse
cdef class PyResponse:
cdef CefRefPtr[CefResponse] cefResponse
def GetStatus(self):
return (<CefResponse*>(self.cefResponse.get())).GetStatus()
तो बजाय resp = PyResponse(cppObject)
कॉल resp = CreatePyResponse(cppObject)
:
Cython के हाल के संस्करणों पर (0.22 के रूप में कम से कम), @staticmethod डेकोरेटर cdef कार्यों पर लागू किया जा सकता है ताकि एक अब वैश्विक निर्माता बना सकते हैं एक स्वच्छ वर्ग के लिए एक स्थिर वर्ग में कार्य करें। – Dologan
'बार' सी ++ कक्षा मूल संख्यात्मक प्रकार नहीं है और कोई डिफ़ॉल्ट रूपांतरण नहीं है। – jfs
@ जेएफ। सेबेस्टियन क्या आप समझ सकते हैं कि आपका क्या मतलब है? पॉइंटर को स्टोर करने के लिए बार को मूल संख्यात्मक प्रकार नहीं होना चाहिए। – Amoss