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 次。
我有一个程序部分类似于以下内容:
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 次。