मैंने अपने सी ++ गेम प्रोग्रामिंग कैरियर के माध्यम से अब तक अपवादों को कभी भी स्पर्श नहीं किया है लेकिन हाल ही में मैं ओग्रे इंजन के साथ एक परियोजना पर काम कर रहा हूं और मैं ठीक से सीखने की कोशिश कर रहा हूं। मुझे सी ++ अपवादों के सामान्य उपयोग पर बहुत अच्छे प्रश्न और उत्तर मिल गए हैं, लेकिन मैं यहां से कुछ बाहरी राय प्राप्त करना चाहता हूं कि ओग्रे का उपयोग अच्छा है और उनके साथ कैसे काम करना है।ओग्रे का अपवादों का उपयोग इनका उपयोग करने का एक अच्छा तरीका है?
के साथ शुरू करने के लिए, अपने आप अपवाद वर्ग के राक्षस के दस्तावेज़ से उद्धृत:
राक्षस वापसी मान कभी नहीं का उपयोग करता है त्रुटियों से संकेत मिलता है। इसके बजाय, यदि कोई त्रुटि उत्पन्न होती है, तो एक अपवाद फेंक दिया जाता है, और यह वह वस्तु है जो समस्या के विवरण को समाहित करती है। OGRE का उपयोग करने वाले एप्लिकेशन को हमेशा यह सुनिश्चित करना चाहिए कि अपवाद पकड़े गए हैं, इसलिए सभी OGRE इंजन फ़ंक्शंस {} पकड़ (Ogre :: अपवाद & ई) {} ब्लॉक के भीतर होना चाहिए।
वास्तव में? प्रत्येक एकल ओग्रे फ़ंक्शन एक अपवाद फेंक सकता है और कोशिश/पकड़ ब्लॉक में लपेटा जा सकता है? वर्तमान में इसे मुख्य रूप से प्रयास/पकड़ से हमारे उपयोग में संभाला जाता है जो बाहर निकलने से पहले अपवाद विवरण के साथ एक संदेश बॉक्स दिखाएगा। यह डिबगिंग के लिए थोड़ा अजीब हो सकता है हालांकि आपको स्टैक ट्रेस नहीं मिलता है, केवल उस फंक्शन जिसने त्रुटि को फेंक दिया - अधिक महत्वपूर्ण है हमारे कोड से फ़ंक्शन जिसे ओग्रे फ़ंक्शन कहा जाता है। अगर यह ओग्रे कोड में एक जोर था तो यह सीधे डीबगर में कोड पर जायेगा और मैं यह पता लगाने में सक्षम हूं कि क्या हो रहा है - मुझे नहीं पता कि मुझे कुछ याद आ रहा है जो मुझे अनुमति देगा डीबग अपवाद पहले से ही?
मैं अब हमारे कोड में कुछ और प्रयास/पकड़ ब्लॉक जोड़ना शुरू कर रहा हूं, आम तौर पर इस बारे में सोच रहा हूं कि ओग्रे फ़ंक्शन अपवाद फेंकता है या नहीं। अगर ऐसा कुछ है जो काम कर रहे सबकुछ को रोक देगा तो मुख्य प्रयास/पकड़ इसे संभालने दें और प्रोग्राम से बाहर निकलें। यदि यह बहुत महत्वपूर्ण नहीं है तो फ़ंक्शन कॉल के ठीक बाद इसे पकड़ें और कार्यक्रम जारी रखें। इसका एक हालिया उदाहरण एक इकाई पर लागू सामग्रियों के लिए कशेरुक/खंड कार्यक्रम पैरामीटर का एक वेक्टर बनाना था - यदि किसी सामग्री में कोई पैरामीटर नहीं था तो यह एक अपवाद फेंक देगा, जिसे मैंने पकड़ा और फिर अनदेखा किया क्योंकि यह ' टी पैरामीटर की मेरी सूची में जोड़ने की जरूरत है। क्या यह चीजों से निपटने का एक उचित तरीका प्रतीत होता है? ओग्रे के साथ काम करने के लिए कोई विशिष्ट सलाह बहुत सराहना की जाती है।
+1 "जहां भी आप अर्थपूर्ण रूप से अपवाद के साथ सौदा कर सकते हैं" – Yacoby
तो अर्थात् अपवाद से निपटने के लिए पैरामीटर खोजने के मेरे अंतिम उदाहरण पर लागू होगा? जब तक अपवाद से पहले कुछ भी संशोधित नहीं किया गया है तब तक यह किसी भी समस्या का कारण नहीं बनता है। टाइमडे ने बताया कि जब उन्हें फेंक दिया जाता है तो अपवादों को कैसे डिबग किया जाए, जो बहुत मदद करेंगे, अगर मैं डीबग मोड में मुख्य प्रयास/पकड़ लेता हूं तो अपवाद नहीं पकड़े जाने पर क्या होगा? – identitycrisisuk
जब अपवाद नहीं पकड़े जाते हैं तो डीबगर इसे पकड़ता है, और आपको वह बिंदु दिखाता है जहां से इसे फेंक दिया गया था। – Christopher