如何重构重复的控件结构?

时间:2018-11-21 19:34:02

标签: c++ refactoring c++14

我有完全相同的重复控制结构,不同之处在于内部事物的发生方式。特别是,我不知道如何处理breakcontinuereturn。例如:

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依赖于ij,并且需要通过break循环和{{ 1}}退出功能。我该如何排除重复数据?

我曾想过要编写一个以continue作为参数的函数,但是我不确定如何处理jreturn或{{ 1}} s。

[我对复制不满意,因为在doSomethingbreak中对continuereturn进行了一些检查,并像其他四个功能一样完全一样;唯一的区别是几行代码。]

1 个答案:

答案 0 :(得分:0)

如果您真的希望/坚持在循环上下文中使用breakcontinuereturn具有相同的内部控制,那么建议的解决方案是:-(。

另一方面,如果doSomethingFG12函数均具有已定义的接口,则补充您的通用控制结构以使用breakcontinue和{{1}处理情况}从那里选择返回值。