Как запустить код, даже когда происходит исключение

У меня есть такой код:

try
{
do_some_processing();
// Write Log to appropriate place.
}
catch
{
// add debug info to log
// Write Log to appropriate place.
processException();
}

Как видите, мне нужно писать логи, когда есть исключение, а когда его нет.

Есть ли способ, которым я могу сделать в одном месте? и не копировать его дважды?

насколько я знаю, наконец, вызывается после обработки исключения, а не перед ним. Я прав?

1

Решение

Я бы использовал 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;
}
4

Другие решения

Просто переместите его за пределы try-catch блок:

try
{
do_some_processing();
}
catch
{
// add debug info to log
processException();
}

// Write Log to appropriate place.
3

Как насчет:

try{
do_some_processing();
}catch{
// add debug info to log
processException();
}

// write log to appropriate place
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector