【发布时间】:2024-01-17 12:54:02
【问题描述】:
int cmd_x() {
int result;
result = func1(x, y);
if (result != 0) {
return result;
}
result = func2();
if (result != 0) {
return result;
}
result = func1(x, y, z, w);
if (result != 0) {
return result;
}
...
return result;
}
cmd_x 以瀑布方式执行多个功能。每个函数都返回result。我应该确保result 成功才能继续下一步。
这个if 条件在代码中多次出现,这使得理解和阅读变得更加困难。
有没有办法彻底摆脱这种情况?
我正在考虑创建一个函数指针数组并对其进行循环以仅检查一次代码,但由于函数参数的数量不同,我无法实现它。
【问题讨论】:
-
您可以使用异常(如果这是一个异常事件)并让
cmd_x的调用站点捕获异常 -
异常很慢。
cmd_x是否假设计算事物或检查是否发生了非常错误的事情并且程序应该停止? -
也许做一个链式api?就像
state.transform1().transform2().transform3()在每个转换中,如果结果为 0,则不执行任何操作。这仍然不能合并所有if语句,但它会将if语句放入每个转换中。 -
@Rzu cmd_x 在硬件上执行一些命令,如果一个命令失败,我应该中断下一个命令的执行。您的想法最好从 cmd_x 读取以了解正在执行哪些命令。
-
@NathanOliver 我无法调用
cmd_x检查异常的站点,如果它可以在cmd_x内部完成,我很想看到它的实现。
标签: c++ coding-style