gpt4 book ai didi

c++ - 嵌套冗余 'if' 条件

转载 作者:IT老高 更新时间:2023-10-28 12:40:02 25 4
gpt4 key购买 nike

是否有更好(或更简洁)的方式来编写以下代码?

if(conditionX)
{
if(condition1)
{
// code X1
}
else if(condition2)
{
// code X2
}
}
else if(conditionY)
{
if(condition1)
{
// code Y1
}
else if(condition2)
{
// code Y2
}
}

我还有几个条件,但我想你明白了。

最佳答案

有四种方法可以解决这个问题,但没有一种是通用的:

  1. 保持原样 - 这里没有太多的代码重复。如果计算 condition1condition2 很棘手,请预先计算它们并将它们存储在 bool 变量中
  2. 使 conditionXconditionY 产生一个结果,让您统一 condition1condition2 - 这并不总是可能的,但在某些情况下,您可以准备一个变量来统一两个分支中的事件,例如,通过使用函数指针或 lambda。
  3. 将处理逻辑放入具有虚函数的子类中以消除条件逻辑 - 只有当您的初始设计错过了子类化的机会时,这才有可能。本质上,这种方法将关于 conditionX/conditionY 的决定推到创建子类的地方,然后通过调用适当的覆盖来“重用”该决定界面中的虚函数。
  4. 创建一个代表所有三个条件的数字组合,并转换为 switch - 这个技巧统一了条件,减少了嵌套。

这是最后一种方法的示例:

int caseNumber = ((conditionX?1:0) << 3)
| ((conditionY?1:0) << 2)
| ((condition2?1:0) << 1)
| ((condition1?1:0) << 0);
switch (caseNumber) {
case 0x09:
case 0x0D:
case 0x0F: // code X1
break;
case 0x0A:
case 0x0E: // code X2
break;
case 0x05:
case 0x07: // code Y1
break;
case 0x06: // code Y2
break;
}

关于c++ - 嵌套冗余 'if' 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com