C++ 订单相关操作的建议流量控制结构
我遇到了以下问题,这不难想象,但我想知道最好/最优雅的解决方案是什么。 我有如下的方法,其原型如下所示:C++ 订单相关操作的建议流量控制结构,c++,design-patterns,dry,C++,Design Patterns,Dry,我遇到了以下问题,这不难想象,但我想知道最好/最优雅的解决方案是什么。 我有如下的方法,其原型如下所示: bool Team::isEveryoneDead(int teamOnTurn); bool Team::isEveryoneDead(int teamOnTurn) { bool isFound = isEveryoneDeadInternal( /* params for team not on turn */ ); if(isFound) { isF
bool Team::isEveryoneDead(int teamOnTurn);
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
}
有两个可用的团队,根据团队当前轮换的实例,我想检查团队中的每个角色是否按此特定顺序死亡:
int-teamOnTurn
允许我解析当前处于开启状态的团队实例我评估“存活状态”的顺序在这里非常重要。
现在,可以采取几种方法,比如硬编码订单(因为只有两个可能的订单),通过检查轮到谁,然后执行已经具有特定订单的分支来解析订单,如下所示:
bool Team::isEveryoneDead(int teamOnTurn) {
if (Team::Blue == teamOnTurn) {
checkThis();
checkThat();
} else {
checkThat();
checkThis();
}
}
然而,这个解决方案对于5来说不太管用!针对更多项目的特定呼叫排序的排列应该使用什么技术以最优雅的方式解决此问题:)
提前感谢您,Scarlet。尝试创建另一个实际执行检查的内部方法,并让isEveryoneDead()方法协调检查团队的顺序,可能类似这样:
bool Team::isEveryoneDead(int teamOnTurn);
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的概念:不要重复你自己这就是硬编码的作用,不是吗?您如何解决内部函数中的排序问题?@Scarlet,我更新了代码,使其更加清晰。这样做的目的是不要重复
iseveryonedadinternal()
中的代码,并使其与开关无关。哦,是的,我明白你的意思,这就是我真正的意思。我一直在想,我是否应该做一些基于参数的函数指针赋值之类的事情,但我想这可能是一种过分的做法。谢谢,接受。