c ++除非用于流控制的包装器构造

c++ unless wrapper construct for flow control

我有一个程序部分类似于以下内容:

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

每个函数都应该 return 一个整数,表示它是否 运行 成功,如果成功则说 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();

有这样的结构吗?

你应该使用例外。实际上,它们是一种外部控制流机制,这意味着您不必在常规代码中乱扔错误处理,也不必手动传播每个错误并在每次调用时检查错误。除了例外情况,您的原始代码按原样完全有效,编译器生成代码以检查错误并在发生错误时将错误传播给调用者。

您应该在容器中存储指向您希望调用的函数的指针,然后遍历容器。这样你就可以对结果做任何你喜欢的事情,而且每次函数调用都是一样的,而不必重复这个逻辑 n 次。