s****a 发帖数: 238 | 1 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。 |
g*****g 发帖数: 34805 | 2 写个虚函数的类,让子类实现这个虚函数,然后把这个类
传进你的循环体类。嫌一个个传递不优雅,写个简单的数据
类包起来。
【在 s****a 的大作中提到】 : 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得 : 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该 : 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数 : 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道 : 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
|
t****t 发帖数: 6806 | 3 use lambda function if your compiler supports it.
【在 s****a 的大作中提到】 : 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得 : 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该 : 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数 : 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道 : 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
|
X****r 发帖数: 3557 | 4 反过来做,把循环本身改变的变量们打成一包(数目不多的话都可以直接操作),
用类似iterator的方法来遍历循环,比如
for (int i = 0; i < 100; ++i) {
for (int j = 0; j < i/2; ++j) {
for (int k = 0; k < i-j; ++k) {
// do something about i, j, k and other variables
}
}
}
就变成:
int i, j, k;
init_vars(i, j, k);
do {
// do something about i, j, k and other variables
} while (next_vars(i, j, k));
void init_vars(int& i, int& j, int& k) {
i = 0;
j = 0;
k = 0;
}
bool next_vars(int& i, int& j, int& k) {
if (++k >= i-j) {
k = 0;
if (++j >= i/2) {
j = 0;
if (++i >= 100) {
i = 0;
return false;
}
}
}
return true;
}
这样init_vars和next_vars就可以被重复使用,哪怕循环中间做的事情所要用到
的其他变量完全不相干也没有关系。
【在 s****a 的大作中提到】 : 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得 : 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该 : 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数 : 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道 : 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
|
c****p 发帖数: 6474 | 5 需要传的变量弄成全局的?
【在 s****a 的大作中提到】 : 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得 : 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该 : 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数 : 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道 : 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
|
a****l 发帖数: 8211 | 6 我的看法是,如果这些东西不是肯定一样的话,最好不要放在一起.因为如果是没有理由
一样的东西,就算现在看上去一样,以后肯定会变的不一样.然后过程中维护的人会加一
堆的if,然后左一个条件右一个条件,弄不好还冲突,然后整个过程是一团粥,然后受不了
了只能再去分开,分开的过程又是一见麻烦事.
【在 s****a 的大作中提到】 : 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得 : 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该 : 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数 : 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道 : 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
|
g****y 发帖数: 436 | 7 大牛
【在 X****r 的大作中提到】 : 反过来做,把循环本身改变的变量们打成一包(数目不多的话都可以直接操作), : 用类似iterator的方法来遍历循环,比如 : for (int i = 0; i < 100; ++i) { : for (int j = 0; j < i/2; ++j) { : for (int k = 0; k < i-j; ++k) { : // do something about i, j, k and other variables : } : } : } : 就变成:
|
g*******e 发帖数: 3013 | 8 好象看起来很复杂,建议用javascript。 ;)
【在 s****a 的大作中提到】 : 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得 : 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该 : 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数 : 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道 : 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
|
s****a 发帖数: 238 | 9 太谢谢了,这个方法很好,并行化也很方便
【在 X****r 的大作中提到】 : 反过来做,把循环本身改变的变量们打成一包(数目不多的话都可以直接操作), : 用类似iterator的方法来遍历循环,比如 : for (int i = 0; i < 100; ++i) { : for (int j = 0; j < i/2; ++j) { : for (int k = 0; k < i-j; ++k) { : // do something about i, j, k and other variables : } : } : } : 就变成:
|
s****a 发帖数: 238 | 10 谢谢你提供的思路,还是很清晰的,不过对代码结构要求比较大的改动。java中可能更
好用
【在 g*****g 的大作中提到】 : 写个虚函数的类,让子类实现这个虚函数,然后把这个类 : 传进你的循环体类。嫌一个个传递不优雅,写个简单的数据 : 类包起来。
|
s****a 发帖数: 238 | 11 能稍微展开说说吗?比如哪个库里有?
【在 t****t 的大作中提到】 : use lambda function if your compiler supports it.
|
t****t 发帖数: 6806 | 12 google c++0x lambda
gcc 4.6+ support it.
【在 s****a 的大作中提到】 : 能稍微展开说说吗?比如哪个库里有?
|