我有完全相同的重复控制结构,不同之处在于内部的事情是如何发生的。特别是,我不知道如何处理break
、continue
和return
。例如:
int f() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (isFoo(i, j)) {
// doSomethingF1
} else {
// doSomethingF2
}
}
}
}
int g() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (isFoo(i, j)) {
// doSomethingG1
} else {
// doSomethingG2
}
}
}
}
其中doSomething
依赖于i
和j
,需要通过j
循环break
或continue
,return
退出功能。我该如何考虑这一点以消除重复?
我曾想过编写一个以doSomething
s为自变量的函数,但我不确定如何处理break
s、continue
s或return
s。
[我对重复不满意,因为在f()
、g()
和其他四个完全相同的函数中,对i
和j
进行了一些检查;唯一的区别是几行代码。]
如果真的希望/坚持在循环上下文中与break
、continue
和return
具有相同的内部控制,那么所提出的解决方案是宏:-(.
另一方面,如果doSomethingFG12
函数都有一个定义的接口,那么用break
、continue
和return
来补充您的通用控制结构以处理这种情况,从而从中选择返回值。