我遇到了以下问题,通过任何想象都不难解决,但我想知道最好/最优雅的解决方案是什么。
我有以下方法,其原型(prototype)如下所示:
bool Team::isEveryoneDead(int teamOnTurn);
有两个团队可用,根据当前轮到哪个团队的实例,我想检查团队中的每个角色是否都以这个非常特殊的顺序:
遍历团队中未首先的所有角色。如果有任何活着的角色,停止循环(并转到第 2 步)。如果没有没有活着,终止函数并返回。
现在我知道未轮到的团队至少包含一个活着的角色,循环遍历当前轮到的团队并检查相同的东西。如果我发现某人还活着,停止循环并终止/返回。
参数 int teamOnTurn
允许我解析当前轮到的 Team 实例。 我评估“存活条件”的顺序在这里非常重要。
现在,有几种方法可以采用,例如对顺序进行硬编码(因为只有 2 个可能的顺序)并通过检查谁在轮到来解析顺序,然后执行已经具有特定顺序的分支,如下所示:
bool Team::isEveryoneDead(int teamOnTurn) {
if (Team::Blue == teamOnTurn) {
checkThis();
checkThat();
} else {
checkThat();
checkThis();
}
}
然而,这个解决方案对于 5 人来说不太适用!更多项目的特定调用排序的排列。 应该采用什么技术来最优雅地解决这个问题:)?
提前致谢,Scarlet。
最佳答案
尝试创建另一个实际执行检查的内部方法,并让 isEveryoneDead() 方法协调检查团队的顺序,可能是这样的:
bool Team::isEveryoneDead(int teamOnTurn) {
bool isFound = isEveryoneDeadInternal( /* params for team not on turn */ );
if(isFound) {
isFound = isEveryoneDeadInternal( /* params for team on turn */ );
}
return isFound;
}
// This method know nothing about on turn or off turn
bool Team:isEveryoneDeadInternal() {
// Loop through all characters in the team, checking if any are alive
// When the first live character is found, return true
// else return false
}
这是一个叫做 DRY 的概念:不要重复自己
关于c++ - 建议的顺序相关操作的流控制结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500387/