2017-12-14 4 views
1

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]으로 연결됩니다.C++ Have 함수 형식을 사용하여 int 및 int [] 템플릿을 사용합니다.

현재이 기능은 오버로드로 구현되어 있지만 붙여 넣은 코드가 많이 생성됩니다. 템플릿을 사용하여이를 수행 할 수있는 방법이 있습니까? 템플릿 기능이

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

어떻게 int로서 유형를 사용하거나 일반적인 방법으로 [] int로 관리하는 같은 것이기 때문에

+0

정말이 문제를 해결 템플릿시겠습니까? 당신은 여전히 ​​전문화가 필요합니다. 중복 된 코드를 자체 기능으로 리팩토링 할 수는 없습니까? – tkausl

+0

이 경우 템플릿이 실제로 필요하지 않습니다. –

답변

1

두 번째 기능을 "일반화"한 세 번째 기능을 만들 수 있습니다. 그것은 당신이 원하는 맛을 지정하는 방법과 함께 "맛"두 매개 변수를 받아야합니다.

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

는 템플릿이 문제를 해결할 수 있다고 생각하지 않아? 이

같은 일을

이 대신 당신이 foo는foo는 사용할 수 (INT 바 [], 정수형) 만들기 위해 코드를 리팩토링 수 (INT 바는 [], int로 [] 형),

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

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

이렇게하면 코드를 중복해서 작성하지 않아야합니다.

관련 문제