У меня есть такой код:
try
{
do_some_processing();
// Write Log to appropriate place.
}
catch
{
// add debug info to log
// Write Log to appropriate place.
processException();
}
Как видите, мне нужно писать логи, когда есть исключение, а когда его нет.
Есть ли способ, которым я могу сделать в одном месте? и не копировать его дважды?
насколько я знаю, наконец, вызывается после обработки исключения, а не перед ним. Я прав?
Я бы использовал 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;
}
Просто переместите его за пределы try-catch
блок:
try
{
do_some_processing();
}
catch
{
// add debug info to log
processException();
}
// Write Log to appropriate place.
Как насчет:
try{
do_some_processing();
}catch{
// add debug info to log
processException();
}
// write log to appropriate place