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