通过捕获(...)并调用重新抛出和分派的共享处理函数,避免在每个调用站点复制catch块:
f() { try { // something } catch (...) { handle(); } } void handle() { try { throw; } catch (const Foo& e) { // handle Foo } catch (const Bar& e) { // handle Bar } // etc }