История изменений
Исправление quiet_readonly, (текущая версия) :
int f2() try { auto_ptr <RetRef> r1 = do_that(); auto_ptr <RetRef> r2 = do_this(); do_formatC(); return 0; } catch (int ret) { return ret; }
Добавьте сюда код из RetRef, пожалуйста. Пока что я не вижу, чтобы у вас делалось undo_that или undo_this. Впрочем, для php-шников это типично.
А вот читаемый код, который работает, в отличие от нафантазированного RetRef, обладающего навыками телепата и умеющего вызвать undo_that или undo_this в зависимости от положения звёзд.
int f1()
{
std::vector<Op> todo;
todo.pushBack(Op(do_that, undo_that));
todo.pushBack(Op(do_this, undo_this));
todo.pushBack(Op(do_formatC));
return performOperations(todo);
}
А вот код, аналогичный вашему убогому второму примеру
int f1()
{
int code = 0;
if (do_that(code) && do_this(code) && do_formatC(code))
return 0;
return code;
}
Исходная версия quiet_readonly, :
int f2() try { auto_ptr <RetRef> r1 = do_that(); auto_ptr <RetRef> r2 = do_this(); do_formatC(); return 0; } catch (int ret) { return ret; }
Добавьте сюда код из RetRef, пожалуйста. Пока что я не вижу, чтобы у вас делалось undo_that или undo_this. Впрочем, для php-шников это типично.
А вот читаемый код, который работает, в отличие от нафантазированного RetRef, обладающего навыками телепата и умеющего вызвать undo_that или undo_this в зависимости от положения звёзд.
int f1()
{
std::vector<Op> todo;
todo.pushBack(Op(do_that, undo_that));
todo.pushBack(Op(do_this, undo_this));
todo.pushBack(Op(do_formatC));
return performOperations(todo);
}