2009-04-11 11 views
6

में सी ++ का कितना समर्थन समर्थित है, मैं एक आईफोन ऐप बनाना चाहता हूं, लेकिन मैं सी ++ में ढांचा बनाने की योजना बना रहा हूं। क्या उद्देश्य-सी ++ में टेम्पलेट्स जैसी चीजों का उपयोग करना संभव है। मुझे लगता है कि वास्तव में सवाल यह है कि, क्या मैं बढ़ावा का उपयोग कर सकता हूं?उद्देश्य-सी ++

+0

यह उत्तर के रूप में इतना उपयोगी नहीं हो सकता है लेकिन यदि आप पहले ही सी ++ जानते हैं, तो उद्देश्य-सी उठाकर हवा होना चाहिए। बेशक आप एक ऐप पोर्ट कर रहे हैं तो मैं सवाल और अधिक समझता हूं। – Sean

+0

सी ++ का उपयोग करने के लिए यह समझ में आता है जब आपको गेम इंजन में बहुत अधिक प्रदर्शन की आवश्यकता होती है। –

उत्तर

10

सभी सी ++ उद्देश्य सी ++ में समर्थित है। बूस्ट का उपयोग करना संभव होना चाहिए, लेकिन आपको कुछ प्लेटफार्म निर्भर चीजों को बंद करना पड़ सकता है।

+2

मैंने बिना किसी बदलाव के बढ़ावा दिया है। यह बॉक्स के ठीक बाहर काम किया। –

+1

मुख्य बढ़ावा पुस्तकालयों को काम करना चाहिए, लेकिन कुछ आईओ संबंधित पुस्तकालय शायद बॉक्स से बाहर काम नहीं करेंगे। – Zifre

+1

ज़िफ़्रे: सच है कि आपको उन लोगों के साथ कुछ काम करने की ज़रूरत है। –

4

उद्देश्य सी ++ सी ++ का सुपरसेट है। सी/सी ++ में आप जो कुछ भी कर सकते हैं वह ओब्जे-सी ++ में किया जा सकता है। "उद्देश्य" भाग में अन्य चीजों के अलावा, एक स्मॉलटॉक-एस्क्यू मैसेजिंग सिस्टम और सी ++ के अन्य परिवर्धन शामिल हैं।

4

यह इंगित किया जाना चाहिए कि आप ऑब्जेक्टिव-सी ++ में सी ++ में जो भी कर सकते हैं वह सब कुछ नहीं कर सकते हैं। उदाहरण के लिए आप उद्देश्य-सी कक्षा से C++ ऑब्जेक्ट्स पर वर्चुअल फ़ंक्शंस को कॉल नहीं कर सकते हैं। एक बार जब आप सी/सी ++ फ़ंक्शन में कॉल करते हैं तो आप जो भी चाहें कर सकते हैं।

+0

मुझे विश्वास नहीं है कि यह सही है। आप उद्देश्य-सी ++ कोड के भीतर से C++ वर्चुअल विधियों को कॉल कर सकते हैं। –

+0

http://tinyurl.com/yfrxwg9 स्टेट्स कि:। "ऑब्जेक्टिव-सी ++ इसी तरह सी ++ वर्ग उदाहरणों उदाहरण चर के रूप में सेवा करने के लिए अनुमति देने के लिए प्रयासरत है यह जब तक संभव है सी ++ प्रश्न में वर्ग (के सभी के साथ के रूप में अपनी superclasses) में कोई वर्चुअल सदस्य फ़ंक्शन परिभाषित नहीं है। यदि कोई वर्चुअल सदस्य फ़ंक्शन मौजूद है, तो C++ क्लास ऑब्जेक्टिव-सी इंस्टेंस वैरिएबल के रूप में कार्य नहीं कर सकती है। " यह ओएस के नए संस्करणों में दिखाई देता है कि यह कोई समस्या नहीं है, लेकिन मुझे लगता है कि यह आईफोन ओएस पर है। –

2

उद्देश्य सी में ऑब्जेक्ट्स सी ++ आवश्यक रूप से सी ++ में कार्य नहीं करेंगे। उदाहरण के लिए रचनाकारों और विनाशकों को स्वचालित रूप से बुलाया नहीं जाता है और (मुझे लगता है) कि आप वर्चुअल विधियों को लागू नहीं कर सकते हैं ...

13

क्या उद्देश्य-सी ++ में टेम्पलेट्स जैसी चीजों का उपयोग करना संभव है।

हां, लेकिन आपको यह ध्यान रखना होगा कि आप शुद्ध सी ++ परतों और उद्देश्य-सी ++ कोड के बीच प्रकार और इंटरफेस कैसे मिश्रण करते हैं। परतों के बीच की सीमाओं को ध्यान में रखें, जहां आपको std::string से NSString जैसे प्रकारों को परिवर्तित करने की आवश्यकता होगी, और इसी तरह।

उदाहरण के लिए, आप मूल खेल शुद्ध सी ++ में इंजन को लागू कर सकता है, और सिर्फ ऑब्जेक्टिव-सी में अपने नियंत्रकों और जीयूआई कोड लागू ++। फिर ओब्जे-सी ++ कोड शुद्ध सी ++ इंजन और कोको के बीच गोंद है।

मुझे लगता है कि वास्तव में सवाल यह है कि, क्या मैं बढ़ावा का उपयोग कर सकता हूं?

को देखते हुए iPhone OS ओएस एक्स के एक सबसेट है कि अभी भी एक पूर्ण POSIX परत प्रदान करता है, सबसे बूस्ट पुस्तकालयों चाहिए काम ठीक है। यह डार्विन कोड लिखने जैसा ही होना चाहिए।

ऑब्जेक्टिव-C++ सीमाओं के एक नंबर की (Objective-C 2.0 Reference Guide से सीधे लिया गया) बारे में पता होना करने के लिए कर रहे हैं:

  • आप ऑब्जेक्टिव-सी सिंटैक्स का उपयोग नहीं कर सकते हैं कॉल करने के लिए एक सी ++ वस्तु
  • आप नहीं जोड़ सकते हैं किसी ऑब्जेक्टिव-सी ऑब्जेक्ट
  • पर आप निर्माता या विनाशक नहीं कर सकते हैं, आप कीवर्ड का उपयोग नहीं कर सकते हैं और स्वयं एक दूसरे के रूप में
  • कक्षा पदानुक्रम अलग हैं; एक सी ++ वर्ग एक ऑब्जेक्टिव-सी क्लास से विरासत में नहीं कर सकते हैं, और एक ऑब्जेक्टिव-सी वर्ग एक सी ++ वर्ग से विरासत नहीं कर सकते
  • एक अपवाद ऑब्जेक्टिव-सी कोड में फेंक दिया सी में पकड़ा नहीं किया जा सकता ++ कोड और, इसके विपरीत, एक अपवाद सी में फेंक दिया ++ कोड उद्देश्य-सी कोड में पकड़ा नहीं जा सकता है।
+1

यदि आप एक उत्तर को कम करने जा रहे हैं, तो कम से कम आप ऐसा कर सकते हैं क्यों राज्य। स्वीकार्य उत्तर (9 वोटों के साथ दृढ़ता से) बल्कि अधिक सरलता से कहता है कि सी ++ की सभी सुविधाएं उपलब्ध हैं। यह उत्तर एक योग्य हां कहता है, और सीमाओं को समझाते हुए भाषा संदर्भ से सीधे उद्धरण देता है, और यह कम हो जाता है। वह कैसे काम करता है? – gavinb

+0

सीमा # 2 सामान्य सी ++ विधि की तरह सुनाई उद्देश्य-सी कक्षा में जोड़ा जा सकता है। लेकिन यह विश्वास करना मुश्किल है कि उद्देश्य-सी कक्षा में सी ++ विधि जोड़ना संभव है। क्या आप इसके बारे में अधिक समझा सकते हैं? क्योंकि लिंक टूटा हुआ है, मैं इसे और अधिक नहीं देख सकता। – Eonil

+1

दुर्भाग्य से मुझे उपरोक्त को बदलने के लिए समकक्ष दस्तावेज़ नहीं मिल रहा है। मैंने एडीसी दस्तावेज टीम को एक नोट भेज दिया है कि इसे बहाल किया जाए। प्वाइंट # 2 का मतलब है कि '.mm' मॉड्यूल में एक ओबीजेसी कक्षा में जीवन चक्र प्रबंधन के लिए अभी भी' init' और 'dealloc' विधियां हैं; आप बस उसी वर्ग के भीतर ओबीजेसी और सी ++ दृष्टिकोणों को मिश्रण नहीं कर सकते हैं। आप एक सी ++ विधि और ओबीजेसी कक्षा में नहीं जोड़ सकते हैं, लेकिन आप दोनों के बीच '.mm' के बीच कॉल कर सकते हैं। मुझे उम्मीद है कि यह उपरोक्त को स्पष्ट करता है। – gavinb

1

बूस्ट उपयोगी है लेकिन यह एक परियोजना में जोड़ने के लिए एक बड़ा ओवरहेड भी है।

सुनिश्चित करें कि आप वास्तव में इसकी जरूरत इससे पहले कि आप इसे जोड़ने जाना सुनिश्चित करें।

रेगेक्स समर्थन के लिए: RegexLite

अन्य सभी के लिए: कोको