如何最好地简化这个嵌套代码?注意:这里需要调用两种不同的默认情况

问题描述 投票:0回答:1
if( auto id:{k_b0,k_b1}){
auto baseIndex = 0;
auto count = false;
if(!rmt){
switch(src){
case a: {if(slow) {count = Getconfig(); baseindex =0;} 
         else {count = GetslowConfig(); baseindex =4;}}break;
case b:  {if(slow) {count = Getconfig(); baseindex =0;} 
         else {count = GetslowConfig(); baseindex =4;}}break;
case c: {if(slow) {count = Getconfig(); baseindex =0;} 
         else {count = GetslowConfig(); baseindex =4;}}break;
default : count = GetdefaultConfigone(); break;
}}
else{
switch(src){
case a: {if(slow) {count = Getconfigrmt(); baseindex =1;} 
         else {count = GetslowConfigrmt(); baseindex =5;}}break;
case b:  {if(slow) {count = Getconfigrmt(); baseindex =1;} 
         else {count = GetslowConfigrmt(); baseindex =5;}}break;
case c: {if(slow) {count = Getconfigrmt(); baseindex =1;} 
         else {count = GetslowConfigrmt(); baseindex =5;}}break;
default : count = GetdefaultConfigtwo(); break;
}}
sample(baseindex, count, id);
}

注意:这里需要调用两种不同的默认情况 到目前为止,我已经尝试使用fall-through switch 语句来改善这一点。尽管如此,这看起来还是很糟糕。对如何改进这一点的任何想法持开放态度。 P:S 我没有写这段代码。

c++ nested-loops simplify
1个回答
0
投票

在不查看或修改任何其他代码的情况下,假设您的代码有效,您可以执行以下操作:

if (auto id: {k_b0,k_b1}) {
  auto baseIndex = 0;
  auto count = false;
  if (src != a && src != b && src != c) {
    if (!rmt) count = GetdefaultConfigone();
    else count = GetdefaultConfigtwo();
  }
  else {
    if (!rmt) {
      if (slow) { count = Getconfig(); baseindex = 0; }
      else { count = GetslowConfig(); baseindex = 4; }
    }
    else {
      if (slow) { count = Getconfigrmt(); baseindex = 1; }
      else { count = GetslowConfigrmt(); baseindex = 5; }
    }
  }
  sample(baseindex, count, id);
}

Switch 语句很棒,但在这里似乎不合适。当真正归结为几个条件时,调用哪个函数以及将基索引设置为什么有很多重复。

默认情况是如果 src 不是 a、b 或 c,并且仅根据 rmt 设置计数。您可以在顶部分隔默认值。

然后,情况 a、b 或 c 位于第一个 else 内。它们之间的差异是 rmt 然后很慢。

我建议的下一个改进是结合这 6 个配置函数中的一些,因为我确信它们有很多重叠的相似性。然后,您可以将 rmt/slow 值作为参数传递。要获取多个返回值,您可以通过引用传递 baseIndex/count,或使用类/结构。

最后,我不明白为什么你对 int 或 bool 这样简单的东西使用

auto
类型,我认为你应该明确使用实际类型。另外,我不确定外部 if
if (auto id: {k_b0,k_b1})
是否正确。

© www.soinside.com 2019 - 2024. All rights reserved.