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

c++ unless wrapper construct for flow control

本文关键字:包装 流控制 用于 c++      更新时间:2023-10-16

我有一个程序部分,其工作原理类似于以下内容:

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();

有这样的构造吗?

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

您应该将指向要调用的函数的指针存储在容器中,然后在容器上迭代。这样,您可以对结果执行任何您喜欢的操作,并且每个函数调用都是一样的,而不必重复该逻辑n次。