के माध्यम से C++ करने के लिए अजगर उदाहरण पारित करने के लिए मैं बड़ा घूँट 2.0 के साथ इंटरफेस लपेटकर द्वारा पायथन (2.7) के साथ मेरी लाइब्रेरी का विस्तार कर रहा हूँ, और एक ग्राफ वस्तु जिसमें मैं एक आगंतुक बनाने के लिए चाहते हैं। सी ++, इंटरफ़ेस इस तरह दिखता है:कैसे अजगर/सी एपीआई
struct Visitor
{
virtual void OnStateBegin() = 0;
virtual void OnNode(Node* n) = 0;
virtual void OnStateEnd() = 0;
};
मैं पायथन में एक वर्ग है कि बराबर, अजगर के सारे परिभाषित करता है, जो किसी विज़िटर की परिभाषा के लिए अनुमति देगा परिभाषित करना चाहते हैं:
class GraphVisitor:
def __init__(self, label):
self._label = label
print("__init__(self,{0})".format(self._label))
def OnStateBegin(self):
print("OnStateBegin()" + self._label)
def OnNode(self, i_node):
print("OnNode()" + self._label)
def OnStateEnd(self):
print("OnStateEnd()" + self._label)
और जो मैं करने की कोशिश कर रहा हूं वह पाइथन लिपि में ग्राफ़विजिटर का एक उदाहरण बना रहा है, और C++ से दिए गए उदाहरण के लिए OnStateBegin(), OnNode(), और OnStateEnd() विधियों को कॉल करें। यहाँ मैं अजगर में क्या करना चाहते हैं क्या करना है:
#model is a SWIG wrapped class
mvis = GraphVisitor("This is a test")
model.Visit("mvis") # I'm not sure how to pass the instance 'mvis' to C++?
और मेरी सी ++ बड़ा घूँट से लिपटे में, मुझे यकीन है कि कैसे उदाहरण 'mvis' पर प्राप्त करने के लिए नहीं कर रहा हूँ? मैं पाइथन में परिभाषित कार्यों को कॉल कर सकता हूं कोई समस्या नहीं, लेकिन उदाहरणों ने मुझे स्टंप कर दिया है!
'mvis' सिर्फ एक अजगर वर्ग का एक उदाहरण है। यह आपके 'संरचना आगंतुक' के साथ नहीं कर रहा है। सी/सी ++ में आप इसे केवल 'पायओब्जेक्ट *' के रूप में एक्सेस कर सकते हैं। – Thomas
मुझे पता है कि। मैं यह वर्णन करने की कोशिश कर रहा था कि मैं अजगर में एक आगंतुक को परिभाषित करने की कोशिश कर रहा हूं और सी ++ समकक्ष है। –
क्या आपने मेरा पिछला उत्तर देखा है: http://stackoverflow.com/questions/9040669/how-can-i-implement-ac-class-in-python-to-be-called-by-c/9042139#9042139 (आप एम्बेडिंग के बारे में बिट्स को छोड़ सकते हैं, लेकिन एक पीओओब्जेक्ट से सी ++ इंटरफेस में कनवर्ट करने के बारे में थोड़ा वही है जो आप चाहते हैं) – Flexo