c++ - How to make exception code DRY? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 6 उत्तर

मैं अपनी डिबग करने की कोशिश कर रहा हूँ अपवाद कैच-रेथ्रोज का उपयोग करके आवेदन मेरा अपवाद हैंडलिंग कोड मैं डिबगिंग कर रहा हूँ कुछ ब्लॉकों से अधिक लंबा है, और यह सब कॉपी-पेस्ट किया गया है।

क्या नीचे कोड को बार-बार व्यक्त करने का कोई बेहतर तरीका है? मुझे संदेह है कि मैक्रो यहां जाने का तरीका है, लेकिन मैं आमतौर पर प्लेग की तरह मैक्रोज़ से बचता हूं।

  try {// code here ...} कैच (std :: exception & amp; e) { ErrorMsgLog :: लॉग ("त्रुटि", "std अपवाद" __func__ "" __FILE__ "" __LINE__, e.what ()) में पकड़ा गया; फेंक ई; } पकड़ (अपवाद & amp; ए) {ErrorMsgLog :: लॉग ("त्रुटि", "बिल्डर अपवाद पकड़ा गया" __func__ "" __FILE__ "" __LINE__, e.Message); फेंक ई; } पकड़ (...) {ErrorMsgLog :: लॉग ("त्रुटि", "अज्ञात अपवाद पकड़ा गया" __func__ "" __FILE__ "" __LINE__); Std :: runtime_error फेंक ("अज्ञात अपवाद" __func__ "" __FILE__ "" __LINE__); }  

यह लागू करने का सबसे अच्छा तरीका शायद मैक्रोज़ का उपयोग कर रहा है मैक्रो परिभाषा थोड़ा बदसूरत है, लेकिन मैक्रो को कॉल करना बहुत आसान होगा, और आपको अपने कोड को पुन: व्यवस्थित करने की आवश्यकता नहीं होगी। यहाँ एक नमूना है जो दर्शाता है कि आप इसे कैसे लागू कर सकते हैं:

  #define RUN_SAFE (कोड) {code \} \ catch (std :: अपवाद और; ए) \ {\ ErrorMsgLog :: log ("त्रुटि"); \ throw e; \} \ पकड़ (अपवाद & amp; ई) \ {\ ErrorMsgLog :: लॉग ("त्रुटि"); \ throw e; } \ पकड़ (...) \ {\ ErrorMsgLog :: लॉग ("त्रुटि"); \ throw std :: exception (); \} \ int main () {RUN_SAFE (cout & lt; & lt; "हैलो वर्ल्ड \ n ";}}  

यदि आप मैक्रोज़ का उपयोग नहीं करने के बारे में सचमुच अविश्वसनीय हैं, तो आप उस दृष्टिकोण का उपयोग कर सकते हैं जो उस सुझाव का उपयोग कर सकते हैं और चेक के लिए एक उच्च-आदेश फ़ंक्शन का उपयोग कर सकते हैं जो कोड को पैरामीटर के रूप में लेता है इस दृष्टिकोण की आवश्यकता होगी कि आपको अपने कोड को फिर से रिएक्टर करना चाहिए हालांकि यहां आप इसे कैसे कार्यान्वित कर सकते हैं:

  शून्य रहित विश्व () {cout & lt; & lt; "हैलो वर्ल्ड \ n"; } शून्य रन सेफ (शून्य (* फ़ंक्शन) ()) {try {func ()) } पकड़ (std :: exception & amp; ई) {ErrorMsgLog :: लॉग ("त्रुटि"); फेंक ई; } पकड़ (अपवाद & amp; ई) {ErrorMsgLog :: लॉग ("त्रुटि"); फेंक ई; } पकड़ (...) {ErrorMsgLog :: लॉग ("त्रुटि"); Std :: exception (); }} Int main () {runSafe (हैलो वर्ल्ड); }  

Comments

Popular posts from this blog

sql - Find last match with latest inserted name in table -

c# - XML serialize base class without knowing derived class -

ios - Invalid IPA: missing embedded provisioning profile. Are you sure this is an ad hoc? -