पाइथन सी ++ ऑब्जेक्ट्स को कॉल करने में सक्षम कैसे होता है जब दुभाषिया सी है और w/a c संकलक बनाया गया है?Boost.Python कैसे काम करता है?
उत्तर
सी ++ बाह्य "सी" घोषणाओं द्वारा सी के साथ अंतःक्रिया कर सकता है।
बूस्ट। पायथन में विशेष मैक्रोज़ हैं जो extern "C"
के साथ फ़ंक्शन घोषित करते हैं ताकि पायथन दुभाषिया उन्हें कॉल कर सके। यह जटिल है, लेकिन आप अधिक जानकारी के लिए Boost documentation देख सकते हैं।
पायथन एक सी-एपीआई घोषित करता है (http://docs.python.org/2/c-api/ या http://docs.python.org/3/c-api/ देखें)। यह एपीआई एक सामान्य ऑब्जेक्ट प्रकार को परिभाषित करता है जिसे PyObject
कहा जाता है जो कि केवल एक सामान्य सी संरचना है। यह संरचना एक पाइथन ऑब्जेक्ट सब कुछ (लगभग) परिभाषित करती है, उदाहरण के लिए, इस ऑब्जेक्ट पर जोड़ या तुलना करते समय क्या होता है या बस इसे फ़ंक्शन की तरह कॉल करें।
क्योंकि पाइथन प्रकार भी ऑब्जेक्ट्स हैं (और इसलिए PyObject
संरचना द्वारा सी में प्रतिनिधित्व किया जाता है), एक नया प्रकार परिभाषित करना एक नया PyObject
संरचना को परिभाषित करने का एक साधारण मामला है। जब पाइथन में विधियों को बुलाया जाता है, तो दुभाषिया इस संरचना से जुड़े सी कार्यों को कॉल करता है।
जब तक एक दिया गया (संकलित) एक्सटेंशन सही प्रविष्टि बिंदु प्रदान करता है, जैसे कि पाइथन दुभाषिया इसका आत्मनिरीक्षण कर सकता है और पता लगा सकता है कि क्या उपलब्ध है (ऊपर बताए गए दस्तावेज विवरण में इसे समझाते हैं), तो यह इनका उपयोग कर सकता है किसी अन्य ऑब्जेक्ट की तरह ऑब्जेक्ट्स जो आप आम तौर पर प्रॉम्प्ट पर उपलब्ध होते हैं - जिसे बीटीडब्ल्यू, एक ही सी-एपीआई का उपयोग करके बनाया जाता है। यह संकलित एक्सटेंशन import
आपको पर्याप्त बनाता है।
मुझे उम्मीद है कि यह कुछ हद तक स्पष्ट है कि पाइथन दुभाषिया उपर्युक्त से संकलित एक्सटेंशन से सामान कहता है। एकमात्र लापता अंतर यह है कि सी-एपीआई सी ++ कोड कैसे कॉल करता है।
बूस्ट। पाइथन इस तरह के कोड के साथ कोड में सी प्रविष्टि बिंदु घोषित करके करता है जैसा कि यहां बताया गया है: Elegantly call C++ from C। हर बार जब आप कॉल करते हैं, उदाहरण के लिए, boost::python::class_
, यह आपके द्वारा पाइथन की घोषणा के प्रकार के लिए करता है, इसलिए PyObject
बनाता है जो आपके द्वारा चुने गए नाम के साथ आपकी कक्षा का प्रतिनिधित्व करता है। जैसा कि आप इस कक्षा में .def
पर कॉल करते हैं, आप उस संरचना के आंतरिक स्लॉट भरते हैं, और अधिक विधियों, ऑपरेटरों और आपके नए प्रकार के गुणों को घोषित करते हैं। इनमें से प्रत्येक आंतरिक स्लॉट एक सी-स्टाइल फ़ंक्शन को इंगित करता है जो बराबर सी ++ कॉल के लिए एक रैपर नहीं है।
- 1. Boost.Python
- 2. Boost.Python
- 3. boost.python
- 4. Boost.Python
- 5. कैसे काम करता है?
- 6. Boost.Python - संदर्भ द्वारा वापस कैसे करें?
- 7. ट्रैसरआउट कैसे काम करता है?
- 8. एमटीओएम कैसे काम करता है?
- 9. एक्सएसएस कैसे काम करता है?
- 10. आईवी कैसे काम करता है?
- 11. सीटीएफई कैसे काम करता है?
- 12. कैसे काम करता है HTTP_USER_AGENT
- 13. कास्टिंग कैसे काम करता है?
- 14. ड्रॉपबॉक्स कैसे काम करता है?
- 15. queue.js कैसे काम करता है?
- 16. "object.new" कैसे काम करता है?
- 17. ResolveProjectReferences कैसे काम करता है?
- 18. ZipInputStream.getNextEntry() कैसे काम करता है?
- 19. form.reset() कैसे काम करता है?
- 20. जिन्न कैसे काम करता है?
- 21. रीडिस कैसे काम करता है?
- 22. css3pie कैसे काम करता है?
- 23. IDataErrorInfo कैसे काम करता है?
- 24. डेटटाइम.ToUniversalTime() कैसे काम करता है?
- 25. TouchImageView कैसे काम करता है?
- 26. jQuery.on() कैसे काम करता है?
- 27. शेड_सेटफिनिटी() कैसे काम करता है?
- 28. हेडर() कैसे काम करता है?
- 29. कैसे malloc काम करता है?
- 30. CellForRowAtIndexPath कैसे काम करता है?