2012-01-31 10 views
5

उद्देश्य सी ++ में सी ++ और उद्देश्य सी कितना एकीकरण है? मुझे एहसास है कि उद्देश्य सी ++ सी ++ और उद्देश्य सी कोड दोनों संकलित करता है, लेकिन क्या भाषाएं वास्तव में एक दूसरे के साथ बातचीत करती हैं?उद्देश्य सी ++ में सी ++ का उपयोग?

उदाहरण के लिए मैं एक उद्देश्य सी ऑब्जेक्ट का टेम्पलेट बना सकता हूं? एक सी ++ कक्षा से एक उद्देश्य सी कक्षा विरासत के बारे में कैसे?

मैं मूल रूप से पूछने की कोशिश कर रहा हूं क्या भाषा मिश्रण है या क्या वे एक ही फ़ाइल में एक साथ संकलित करते हैं? किस हद तक?

+0

आपके पास यह पिछड़ा है। एक .mm फ़ाइल के लिए एक सी ++ कंपाइलर उद्देश्य-सी कोड संकलित करता है। एक .m फ़ाइल के लिए एक सी कंपाइलर का उपयोग किया जाता है। मिक्सिंग सी ++ और ऑब्जेक्टिव-सी क्लास पदानुक्रम "सामान्य रूप से" संभव नहीं है (हालांकि मुझे यकीन है कि चाल हैं), लेकिन आप एक वर्ग उदाहरण को दूसरे में एम्बेड कर सकते हैं। –

उत्तर

2

वैसे अनुप्रयोगों को बनाने के लिए उद्देश्य-सी ++ का उपयोग करना काफी आम है। आप ऑब्जेक्टिव-सी को सी ++ कोड के आसपास लपेट सकते हैं लेकिन आप ऑब्जेक्ट्स साझा नहीं कर सकते हैं। उदाहरण के लिए आप उद्देश्य-सी में एक एनएसएसटींग ऑब्जेक्ट नहीं बना सकते हैं और विधि को कॉल करने का प्रयास कर रहे हैंफिक्स: सी ++ और वीजा बनाम से। तो उन दोनों के बीच सामग्री साझा करने के लिए आपको सी प्रकारों जैसे कि structs, chars, ints इत्यादि का उपयोग करने की आवश्यकता है। ऐसा इसलिए है क्योंकि उद्देश्य-सी ऑब्जेक्ट केवल उद्देश्य-सी रनटाइम वातावरण में प्रयोग योग्य हैं और C++ ऑब्जेक्ट केवल C++ रनटाइम वातावरण में प्रयोग योग्य हैं । तो एकमात्र चीज जो वे साझा करते हैं और संचार कर सकते हैं सी

शायद एक छोटा सा उदाहरण आपको दिखाएगा कि आप इन दोनों के बीच कैसे बातचीत कर सकते हैं।

NSString * objcStr = [[NSString alloc] initWithString:@"Hello World!"]; 
std::string cppStr ([objcStr UTF8String]); 
std::cout << cppStr; 
1

आप उद्देश्य-सी के अंदर से सी ++ कोड को कॉल कर सकते हैं और कुछ चेतावनियों के साथ बनाम बना सकते हैं। अधिक जानकारी के लिए How well is Objective-C++ supported? देखें

2

उद्देश्य-सी ++ और/या विकिपीडिया article पर उद्देश्य-सी भाषा मार्गदर्शिका अनुभाग देखें।

अपने विशिष्ट प्रश्नों के उत्तर देने के लिए, हाँ भाषाएं "बातचीत" कर सकती हैं। हां, आप ऑब्जेक्टिव-सी ऑब्जेक्ट का एक टेम्पलेट बना सकते हैं (id केवल एक पॉइंटर है) लेकिन उद्देश्य-सी ऑब्जेक्ट्स के साथ RAII का उपयोग करने की अपेक्षा न करें। नहीं, आप उद्देश्य-सी कक्षा से एक उद्देश्य + सी कक्षा या एक सी ++ कक्षा से एक उद्देश्य-सी कक्षा प्राप्त नहीं कर सकते हैं।

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