Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用模板使函数接受类型int和int[]_C++_Templates - Fatal编程技术网

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

C++ C++;使用模板使函数接受类型int和int[],c++,templates,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] 我目前将其实现为重载,但这会导致大量复制粘贴的代码。有没有一种使用模板的方法可以解决这个问题?不要认为模板可以解决您的问题,因为模板函数就是这样

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


我目前将其实现为重载,但这会导致大量复制粘贴的代码。有没有一种使用模板的方法可以解决这个问题?

不要认为模板可以解决您的问题,因为模板函数就是这样的

template<typename T>
void foo(int bar[],T type){
 ...
}
void foo(int bar[],int type)
{
  ...
}

void foo(int bar[],int[] type)
{
  ...
  foo(bar,type[i]);
  ...
}

这样,您应该避免重复代码。

您可以创建第三个函数,它是这两个函数的“泛化”。它应该接收两个“口味”的参数,并用一种方法指定您想要的口味

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);
}

模板真的能解决这个问题吗?您(可能)仍然需要一个专门化,难道您不能在它自己的函数中重构一些重复的代码吗?在这种情况下,不需要真正的模板。