我有一个第三方客户端库,它有一堆通过套接字发送消息的方法。如果套接字变为无效(例如,与远程服务器的连接丢失),则方法会抛出异常。我想干净地包装这些方法,以便我可以在中心位置捕获,记录和重新连接等。每次我在客户端对象上调用任何方法时,我基本上都想避免使用这个样板:
try {
auto result = client->doSomething(someValue);
} catch(TransportException e) {
cerr << "Connection failed..." << endl;
client->getTransport()->reconnect(); // some reconnection logic
}
有很多方法,因此排除了扩展类或在其周围创建手动包装器。
我考虑过Macros,但是如果可能的话我不会不使用它。
我遇到this post在C ++中实现代理(就像在Java中一样),但我不确定如何捕获客户端方法抛出的异常。
有没有办法干净利落地实现这一目标? (我使用的是C ++ 11)。