c++,除非用于流控制的包装器构造
c++ unless wrapper construct for 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();
有这样的构造吗?
您应该使用异常。实际上,它们是一种外部控制流机制,这意味着您不必在常规代码中随意处理错误,也不必手动传播每个错误并在每次调用中检查错误。除了例外,原始代码是完全有效的,编译器会生成代码来检查错误,并在发生错误时将其传播给调用者。
您应该将指向要调用的函数的指针存储在容器中,然后在容器上迭代。这样,您可以对结果执行任何您喜欢的操作,并且每个函数调用都是一样的,而不必重复该逻辑n次。
相关文章:
- 是否可以使用if constexpr删除控制流语句
- 有什么方法可以包装自动类型扣除的助推"tee"流的构造?
- 控制多线程程序中的输出流
- 如何从 SYCL 内核中提取控制流?
- 控制开关语句的流而不中断
- 是否有适用于张量流对象检测 API 的C++包装器
- 如何使用boost::asio::serial_port支持硬件流控制
- C++中的流控制结构,如何修改
- c++,除非用于流控制的包装器构造
- 使用condition_variable控制多线程流
- 如何使用硬件流控制进行提升::ASIO::serial_port_base::flow_control
- 将 C 样式文件包装在流C++
- 有没有办法创建一个公共输出流对象以在控制台上打印并打印到 c++ 中的文件
- 生产编译器如何在流控制上实现析构函数处理
- 流运算符和控制转换优先级
- 控制流图生成器的c++代码
- 这个流控制关键字类标识符的结构是什么?
- C++ 2 个字符串流的包装器("dialogue"模仿)
- C++(或任何其他语言)中的优雅控制流
- gcc-gprof/gcov/other-如何获取函数调用/出口+控制流语句的序列