Aslında, iç içe deneme/yakalama-blokları kullanmak için bile ilginç bir tekniği var: etkili aynı durum işleme gerek çoklu işlevlere sahip varsayalım. Özellikle başka bir arayüzün sarılması durumunda bu yaygın bir senaryodur. durumda, tüm özel durumları yakalamak istisna işleyicisi bir işlev çağırmak ve bu işlevin gerçek istisna işleme uygulamak için istisnayı yeniden atması mümkündür:
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(); } }
Sadece çoğaltmak kaçınarak seviyorum [önemsiz olmayan] kod!
Evet, kesinlikle geçerli. – Anand