मुझे आश्चर्य है कि क्या सामान्य लिस्प से सी ++ कोड को कॉल करने का कोई तरीका है (अधिमानतः पोर्टेबल, और यदि नहीं, अधिमानतः एसबीसीएल में, और यदि नहीं, तो क्लोजर, सीएलआईएसपी या ईसीएल)।सी कॉलिंग ++ (नहीं सी) कॉमन लिस्प से?
सी ++ को संख्यात्मक गणना के लिए अंदरूनी लूप कहा जाएगा, इसलिए कॉल तेज होने पर यह अच्छा होगा।
CFFI इस का समर्थन नहीं लगता है:
"अवधारणा अन्य भाषाओं के लिए सामान्यीकृत किया जा सकता; लेखन के समय, केवल CFFI के सी समर्थन, काफी पूरा हो गया है, लेकिन सी ++ समर्थन से किया जा रहा है इस पर काम किया।"
(मैनुअल के 4 अध्याय)
SBCL मैनुअल सी का उल्लेख नहीं करता ++ या तो; यह वास्तव में
यह अध्याय, का वर्णन सी कार्यक्रमों और पुस्तकालयों (और करने के लिए SBCL के इंटरफेस के बाद से सी इंटरफेस सामान्य भाषा यूनिक्स दुनिया के के एक प्रकार के कर रहे हैं अन्य कार्यक्रमों और सामान्य रूप में पुस्तकालयों के लिए, कहते हैं।)
सी ++ कोड ओओ और ऑपरेटर ओवरलोडिंग का उपयोग करता है, इसलिए इसे वास्तव में जी ++ के साथ संकलित करने की आवश्यकता है।
और जहां तक मुझे पता है, मेरे पास सी ++ मुख्य() फ़ंक्शन और सी फ़ंक्शंस के लिए रैपर लिख सकते हैं, लेकिन दूसरी तरफ नहीं - क्या यह सच है?
वैसे भी ... वहाँ किसी तरह यह करने के लिए है?
धन्यवाद!
दूसरा विकल्प अच्छा होगा, लेकिन सी ++ कोड (जो मेरा नहीं है) ऑपरेटर ओवरलोडिंग का उपयोग करता है। मुझे लगता है कि मैं एक बाहरी "सी" ऑपरेटर + decalare नहीं कर सकता ... पहला विकल्प इस्तेमाल किए जा रहे संकलक पर निर्भर करता है, लेकिन एक अच्छा सुझाव है! – Jay
आप अभी भी ओवरलोडेड ऑपरेटरों को बाहर से कॉल कर सकते हैं, आपको बस अपने एपीआई के साथ थोड़ा सा रचनात्मक होना है।उदाहरण के लिए: 'बाहरी "सी" शून्य add_Foo (फू * परिणाम, कॉन्स फू * foo1, कॉन्स फू * foo2) {* परिणाम = * foo1 + * foo2; } ' –
सभी सी ++ फ़ंक्शंस" नियमित सी तक उबाल नहीं "। सदस्य फ़ंक्शंस आमतौर पर नाम मैंगलिंग के अलावा एक अलग कॉलिंग सम्मेलन का उपयोग करते हैं। (मैं x86 पर एमएसवीसी में विश्वास करता हूं, 'यह' पैरामीटर एक रजिस्टर में पारित किया जाता है, जबकि सी फ़ंक्शन में सभी पैरा स्टैक पर पास किए जाते हैं) – jalf