我有这样的代码:
try
{
do_some_processing();
// Write Log to appropriate place.
}
catch
{
// add debug info to log
// Write Log to appropriate place.
processException();
}
正如您所看到的,我需要在有异常时和没有异常时写日志。
我有什么方法可以在一个地方做吗?而不是两次复制?
据我所知,最终在处理异常后调用,而不是在它之前调用。我是对的吗?
答案 0 :(得分:4)
我会使用RAII成语
class RaiiLogger {
public:
RaiiLogger() : exception_fired_(true) {}
void set_success() {
exception_fired_ = false;
}
~RaiiLogger() {
if (exception_fired_) {
// log it
} else {
// log it
}
}
private:
bool exception_fired_;
};
void do_work() {
RaiiLogger logger;
try {
// do some work
logger.set_success();
} catch(...) {
// handle exception
}
}
int main() {
// your code goes here
do_work();
return 0;
}
答案 1 :(得分:3)
只需将其移出try-catch
区块:
try
{
do_some_processing();
}
catch
{
// add debug info to log
processException();
}
// Write Log to appropriate place.
答案 2 :(得分:1)
怎么样:
try{
do_some_processing();
}catch{
// add debug info to log
processException();
}
// write log to appropriate place