我有2个功能彼此相似,重构2层的功能使用不同的参数,但在C几乎相同的实施
void func1(info1* ari,int l,int r) {
int size = sizeof_char_array(ari->field_type) ;
for (int i=0 ; i<size ; i++) {
if (ari->field_type[i] & MEMORY) {
mem_info* mi = (mem_info*)ari->field[i] ;
mi->L = l ;
}
else if ...
else {
info2* p = (info2*)ri->field[i] ;
func2(p,l,r);
}
}
}
另一个是
void func2(info2* ri,int l,int r) {
int size = sizeof_char_array(ri->field_type) ;
for (int i=0 ; i<size ; i++) {
if (ari->field_type[i] & MEMORY) {
mem_info* mi = (mem_info*)ri->field[i] ;
mi->L = l ;
}
else if...
else {
info2* p = (info2*)ri->field[i] ;
func2(p,l,r);
}
}
}
很容易找到的唯一区别这2个功能是info1*
和info2*
。 info1
和info2
是具有相似布局的结构。
有没有办法将这2个函数重构为一个优雅的C?
请注意,你的'func1'不是递归(它调用'func2');你的'func2'是递归的(它自己调用它)。这是一个错字吗?该片段还使用'info2'和一个演员表。那真的是你想要的吗?如果是这样,功能之间有很多不同 - 远远超过要编辑的字符的表面数量。 –
是的,func2自己调用。该片段使用info2。 @JonathanLeffler –