वास्तव में, नेस्टेड ट्राई/कैच-ब्लॉक का उपयोग करने के लिए भी एक दिलचस्प तकनीक है: मान आप एक से अधिक कार्य करता है जो प्रभावी रूप से एक ही अपवाद संचालन की जरूरत है। विशेष रूप से जब एक और इंटरफेस लपेटना यह आम परिदृश्य है। इस मामले में यह, सभी अपवादों को पकड़ने के अपवाद संचालक से एक समारोह कहते हैं, और इस समारोह में वास्तविक अपवाद हैंडलिंग लागू करने के लिए अपवाद rethrow करना संभव है:
void fancy_handler() {
try {
throw; // assumes that fancy_handler() is called from catch-clause
} catch (std::runtime_error const& rt) {
std::cout << "runtime-error: " << ex.what() << "\n";
} catch (std::exception const& ex) {
std::cout << "excption: " << ex.what() << "\n";
} catch (...) {
std::cout << "unknown exception\n";
}
}
void foo() { try { do_foo(); } catch (...) { fancy_handler(); } }
void bar() { try { do_bar(); } catch (...) { fancy_handler(); } }
मैं बस से परहेज नकल प्यार [गैर तुच्छ] कोड!
स्रोत
2012-01-03 20:47:57
हां, यह पूरी तरह से मान्य है। – Anand