C ++有函数使用模板接受类型int和int []

时间:2017-12-14 15:47:27

标签: c++ templates

我有一个现有的代码库,其中有数千个调用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]

我目前将此实现为重载但导致大量复制粘贴代码。有没有办法使用模板来做到这一点?

2 个答案:

答案 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]);
  ...
}

这样,你应该避免复制代码。