我有一个现有的代码库,其中有数千个调用foo(int bar[],int type)
,在函数中,x[i].bar=bar[i]
和x[i].type=type
创建了许多结构。
现在有一个边缘情况,我需要为每个x
提供不同的类型。因此foo(int bar[], int type[])
会导致x[i].bar=bar[i]
和x[i].type=type[i]
。
我目前将此实现为重载但导致大量复制粘贴代码。有没有办法使用模板来做到这一点?
答案 0 :(得分:1)
你可以做第三个功能,这是一个"概括"两个。它应该接收" flavors"的参数,并指定你想要的口味。
void foo_internal(int bar[], int type[], int default_type)
{
...
x[i].bar = bar[i];
x[i].type = (type == nullptr) ? default_type : type[i];
...
}
将所有长代码放在那里,然后从重载中调用它:
void foo(int bar[], int type[])
{
foo_internal(bar, type, 0);
}
void foo(int bar[], int type)
{
foo_internal(bar, nullptr, type);
}
答案 1 :(得分:0)
不要认为模板可以解决您的问题,因为模板函数将是这样的
template<typename T>
void foo(int bar[],T type){
...
}
如何设法以通用方式将类型用作int或int []?
相反,你可以重构你的代码,以便 foo(int bar [],int []类型)使用 foo(int bar [],int type) ,做这样的事情
void foo(int bar[],int type)
{
...
}
void foo(int bar[],int[] type)
{
...
foo(bar,type[i]);
...
}
这样,你应该避免复制代码。