C 具有使用模板接受INT和INT []的功能

C++ Have Function Accept types int and int[] using Templates

本文关键字:INT 功能      更新时间:2023-10-16

我有一个现有的代码库,其中有成千上万的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]

我目前已将其作为超载实现,但这导致了许多复制的粘贴代码。有没有一种方法可以使用模板?

您可以制作第三个功能,这是两者的"概括"。它应该接收两个"口味"的参数,并指定您想要的风味。

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

不认为模板可以解决您的问题,因为模板功能将是这样的

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

您如何以通用方式设法使用类型作为int或int []?

取而代之的是,您可以通过 foo(int bar [],int [] type)foo(int bar [],int type) foo(int bar [],int type),这样做类似的事情

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

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