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 раз.