2012-12-17 16 views
8

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

सी ++ नेटवर्क लिब के प्रवाह को त्रुटि के मामले में अपवाद के बजाय त्रुटि कोड या पिछले त्रुटि लौटने का पर आधारित है ..

अब मैक पर के बाद से हम ऑब्जेक्टिव-सी/सी ++ क्षुधा के लिए उपयोग करें। मुझे उद्देश्य-सी/सी ++ में UI होना चाहिए, लेकिन कोर नेटवर्क कार्यक्षमता के लिए उपयोग की जाने वाली lib एक ही सी ++ lib है।

तो मेरा सवाल यह है कि उद्देश्य सी सी ++ कॉल द्वारा फेंकने वाले अपवादों को संभालने में सक्षम होगा? यदि हां, तो कैसे ? अगर नहीं तो मैं इसे कैसे हल करूं? या हम सी ++ लिब कॉल के आसपास एक रैपर लिखते हैं और अपवादों का उपभोग करते हैं और त्रुटि कोड लौटाते हैं?

कृपया सलाह है, यह कैसे हल करने के लिए ..

उत्तर

7

बशर्ते आप ओएस एक्स पर आईओएस या 64-बिट रनटाइम का उपयोग कर रहे हों, चीजें काफी ज्यादा काम करती हैं। आप एक सी ++ स्टाइल कोशिश/पकड़ लिख सकते हैं और यह अपेक्षित के रूप में काम करेगा, जैसा कि @ try/@ catch होगा। ध्यान दें कि उद्देश्य-सी और सी ++ अपवादों के लिए आपके पास अभी भी दो अलग-अलग शैलियों होंगे; एकमात्र एकीकरण special case है जहां catch(...) या @catch(...)सभी अपवाद, उद्देश्य-सी या सी ++ पकड़ता है। यह आपके क्लीन-अप कोड को केंद्रीकृत करने के लिए मामूली रूप से उपयोगी है, लेकिन इसके बाद आप अपवाद के साथ ऐसा कर सकते हैं, इसे फिर से अंधा कर दें।

लेकिन किसी भी मामले में, exceptions shouldn't be used for flow control in Objective-C (या उद्देश्य-सी ++) प्रोग्राम। आपको वास्तव में सी ++ अपवादों को फंसाने का प्रयास करना चाहिए क्योंकि वे पुस्तकालय से बाहर निकलते हैं और उन्हें एनएसईआरआरआर जैसे अधिक उपयुक्त तंत्र में परिवर्तित करते हैं। विशेष रूप से, उनमें से किसी भी ऐप्पल या तृतीय पक्ष ढांचे के माध्यम से उठाने से बचें - इस तरह के ढांचे उद्देश्य-सी अपवादों के लिए अपवाद सुरक्षित नहीं हैं, अकेले सी ++ वाले हैं, और परिणाम इस प्रकार अनिर्धारित हैं (ज्यादातर स्मृति रिसाव के आसपास घूमते हैं, हालांकि कई अन्य विफलताओं संभव हैं)।

+0

अच्छा जवाब। अपवाद अच्छे उद्देश्य-सी कोड में एक दुर्लभता है और लोग भूल जाते हैं कि अन्य भाषाओं से आने पर। –

+2

क्या आप सी ++ पक्ष से फेंक कोड को पकड़ने के बारे में बता सकते हैं? –

-3

सरल जवाब: हाँ। यह कैसे करना है? शायद यह link मदद कर सकता है।

+3

कृपया लिंक-केवल उत्तर पोस्ट न करें। आपके द्वारा पोस्ट किया गया लिंक अब मृत है, इसलिए यह उत्तर उपयोगी नहीं है। –