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

时间:2015-03-01 19:39:20

标签: c++ flow-control

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

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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

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