2012-11-21 15 views
7

के माध्यम से एक सी ++ फ़ंक्शंस को कॉल करना मेरे पास एक परिदृश्य है जहां मेरे पास C++ कक्षाओं में कुछ फ़ंक्शन हैं और मैं उन्हें एक पायथन स्क्रिप्ट का उपयोग करके कॉल करने में सक्षम होना चाहता हूं। मान लीजिए कि मैं एक समारोह हैएक पायथन स्क्रिप्ट

void greet(_msg); 
    std::cout >> _msg >> std::endl; 

मैं इसे कहते हैं सक्षम होना चाहते हैं एक कस्टम अजगर कॉल गर्त और इसका उपयोग करने के लिए तर्क पारित, उदाहरण के लिए

saySomething("Hello") 

एक .py फ़ाइल मैं यह चाहते हैं चलो बधाई समारोह को कॉल करने और एक तर्क के रूप में "हैलो" पास करने के लिए।

मुझे पता है कि यह एक विषय है जिस पर चर्चा की गई है, और मैंने सी ++ में पायथन को एम्बेड करने पर शोध का एक हिस्सा किया है, मैंने मानक पायथन/सी एपीआई का उपयोग करके एक पायथन लिपि से मूल्यों को पढ़ने में कामयाब रहा है सी ++ से पायथन में एक फ़ंक्शन और इसके लिए तर्क पारित करें, लेकिन मुझे इस विशिष्ट परिणाम को प्राप्त करने के तरीके के बारे में मेरा सिर नहीं मिल रहा है।

मैंने सीटीपीएस और विभिन्न रैपिन लाइब्रेरी जैसे बूस्ट: पायथन या स्विग पर एक नज़र डाली है, लेकिन मुझे यह समझ में नहीं आ रहा है कि वे मुझे कौन सी डिग्री प्राप्त करना चाहते हैं, जो मुझे चाहिए।

+0

"सी ++ से पायथन में एक फ़ंक्शन चलाएं" इसका मतलब क्या है? यदि आप पाइथन एपीआई के रूप में सी/सी ++ को मास्क करना चाहते हैं तो आप सी/सी ++ के लिए पाइथन बाइंडिंग के मूल नियमों को लागू कर सकते हैं, तो बूस्ट :: पायथन लाइब्रेरी भी है जो सी ++ कोड से शुरू होने वाले पायथन एपीआई लिखते समय संभालना आसान हो सकता है। – user1797612

+0

क्षमा करें यह स्पष्ट नहीं था - मैं जो चाहता हूं वह एक पाइथन स्क्रिप्ट प्राप्त करने में सक्षम है जो सी ++ वर्ग के विशिष्ट कार्य को तर्क देने में सक्षम है। जीयूआई की तरह कम या ज्यादा, लेकिन बटन के बजाय पायथन स्क्रिप्ट के माध्यम से किया जाता है। – leoncvlt

+0

ताकि आप इस http://docs.python.org/3.2/extending/extending.html, या boost :: पायथन (शायद आसान) की तलाश में हैं, और इस प्रश्न का उत्तर भी एक अच्छा प्रारंभिक बिंदु हो सकता है http: //stackoverflow.com/questions/276761/exposing-ac-api-to-python। वैसे भी, आप सी ++ कोड के लिए पायथन एपीआई उत्पन्न करना चाहते हैं, यही वह है, केवल आधिकारिक मार्गदर्शिका का पालन करें या इस libs का उपयोग करें। – user1797612

उत्तर

5

अजगर का कौन सा संस्करण के आधार पर आप, 2.x या 3.x में रुचि रखते हैं, विस्तार और 2.x या 3.x के लिए अजगर दुभाषिया अध्याय एम्बेड के माध्यम से पढ़ें। आप केवल में रुचि रखते हैं पायथन, इसलिए सेक्शन 1. सी या सी ++ के साथ पाइथन विस्तार से आपको पाइथन लिपि से सी ++ में कार्यान्वित किए गए कार्यों को कॉल करने में सक्षम होने के लिए आपको क्या आवश्यक है, इसे लागू करने के लिए पूर्ण स्पष्टीकरण प्रदान करेगा। ।

निश्चित रूप से

, कई पुस्तकालयों और जनरेटर है जो आप अजगर (जैसे Boost.Python या SWIG) के लिए C/C++ एपीआई रैप करने के लिए अनुमति देते हैं देखते हैं, लेकिन आपके मामले के काफी सरल लगता है, यह सीखने के उद्देश्य के लिए है कि परिचित कराने के लिए IMO बेहतर है पायथन सी एपीआई के साथ। यहां तक ​​कि यदि आप इन उपकरणों का उपयोग करते हैं, तो आपको अक्सर पाइथन सी एपीआई पर जाना होगा या कम से कम इसे समझना होगा।

3

आप weave.inline() फ़ंक्शन का उपयोग कर सकते हैं, जो सीसी/सी ++ फ़ाइलों को संकलित और निष्पादित करने और अपने पायथन स्क्रिप्ट के भीतर से अपना आउटपुट प्राप्त करने के लिए scipy पैकेज का हिस्सा है।

4

मुझे हाल ही में यह बहुत कुछ करने की आवश्यकता है। बूस्ट। पायथन जो हम खोज रहे हैं (और अधिक) लेकिन व्यक्तिगत रूप से (जितना मुझे बूस्ट पसंद है) मुझे एक सुविधा प्राप्त करने के लिए बूस्ट लाइब्रेरी में आधे बूंद को खींचने के लिए थोड़ा अधिक लगता है। एसडब्ल्यूआईजी भी वास्तव में मेरे लिए एक विकल्प नहीं था क्योंकि कोड निर्माण हमेशा बनाए रखने के लिए दर्द बन जाता है जबकि कक्षा संरचनाएं बदलती हैं (मुझे गलत मत समझो, ये ब्रिलिएन्ट समाधान हैं !, सिर्फ वही नहीं जो मैं ढूंढ रहा था)।

तो, मेरे लिए छोड़ी गई एकमात्र चीज इसे पहले सिद्धांतों (पायथन/सी एपीआई) से लागू करना था। हेंस, "ईसीएस: पायथन" का जन्म हुआ था। ईसीएस: पायथन (पायथन के साथ एंबेडेड सी ++ स्क्रिप्टिंग) एक साधारण सी ++ पायथन रैपर लाइब्रेरी है जिसे मैंने विशेष रूप से सी ++ डेवलपर्स के लिए डिज़ाइन किया है। यह आपको एक सी ++ एप्लिकेशन से ऑब्जेक्ट्स को इंटरैक्टिव स्क्रिप्टिंग के लिए एक एम्बेडेड पायथन दुभाषिया में बेनकाब करने की अनुमति देता है, और यह बहुत हल्का वजन और उपयोग करने में आसान है।

इसका मुफ़्त (बीएसडी) और खुला स्रोत। यदि आप यहां रुचि रखते हैं तो यह है: http://sourceforge.net/projects/ecspython

+0

स्टैक में आपका स्वागत है। –

+0

धन्यवाद मिगुएल-एफ :) –

संबंधित मुद्दे