C++, если конструкция-обертка для управления потоком

У меня есть программная часть, которая работает примерно так:

X->updateA();
X->updateB();
X->updateC();
X->updateD();

Предполагается, что каждая функция возвращает целое число, указывающее, успешно ли она работает, скажем, int ret_val=0 если успешно и int ret_val=1 если не.

Мне интересно, существует ли какая-либо конструкция-обертка, которая обрабатывает каждую функцию последовательно до тех пор, пока ret_val == 0, В моем случае это также вызовет X->updateD(); независимо от стоимости ret_val,

Прямо сейчас у меня есть:

int ret_val = 0;
ret_val = X->updateA();
if (ret_val == 0) ret_val = X->updateB();
if (ret_val == 0) ret_val = X->updateC();
X->updateD();

Который, я думаю, не совсем читабелен. Я бы предпочел что-то похожее на цикл while, хотя оно должно проверять условие после каждого вызова функции. Что-то вроде этого:

int ret_val = 0;
unless(ret_val != 0)
{
  ret_val = X->updateA();
  ret_val = X->updateB();
  ret_val = X->updateC();
}
X->updateD();

Есть ли такая конструкция?

2 ответа

Решение

Вы должны использовать исключения. По сути, они представляют собой внешний механизм управления потоком, который означает, что вам не нужно засорять свой обычный код обработкой ошибок и вручную распространять каждую ошибку и проверять ошибки при каждом вызове. За исключением того, что ваш исходный код полностью действителен как есть, и компилятор генерирует код для проверки на наличие ошибок и передачи их вызывающей стороне, если она произошла.

Вы должны хранить указатели на функции, которые вы хотите вызвать в контейнере, а затем перебирать контейнер. Таким образом, вы можете делать с результатом все, что захотите, и он будет одинаковым для каждого вызова функции, без необходимости повторять эту логику n раз.

Другие вопросы по тегам