Programming/C C++
두개의 값을 받아 단순히 더해주는 함수를 만들어야 한다고 가정해 보겠습니다.
int plus(int i, int j)
{
    return i + j;
}
그런데 만약 위 함수에서 i와 j의 데이터형이 달라져야 한다면 어떻게 될까요? 새로운 형의 데이터를 처리하는 함수를 만들어 오버라이딩하는 것도 방법이지만 이런 경우 함수 템플릿을 이용하면 좀더 효휼적으로 문제를 해결할 수 있습니다.
template <typename T>
T plus(T i, T j)
{
   return i + j;
}
위의 경우가 plus함수에 템플릿을 적용한 경우입니다. 템플릿은 template 키워드를 사용하며 <> 안에 typename으로 뒤의 식별자가 데이터형임을 지정합니다. 따라서 T가 데이터형이 되며 '어떠한' 데이터형의 매개변수를 받아 동작할지 그 틀을 잡게됩니다.

함수의 반환형과 매개변수도 모두 T 로 지정되어 있으므로 함수를 호출할때 실제 전달되는 매개변수의 데이터형에 따라가게 됩니다.
cout << plus(100, 200) << endl;
템플릿이 지정된 함수를 호출합니다. 100이나 200은 정수에 해당하므로 plus는 정수형 데이터에 맞게 덧셈을 수행하고 그 결과를 반환할 것입니다.
cout << plus<int>(100, 200) << endl;
특정 데이터형을 명시적으로 지정하여 함수를 호출할 수도 있습니다.
cout << plus(100, 2.3f) << endl;
이런 경우는 곤란합니다. T가 어떠한 데이터형으로 처리해야 할지 알 수 없기 때문입니다. 굳이 위와 같은처리를 하려면 <int>처럼 데이터형을 명시적으로 지정하여 2.3 에대한 매개변수 데이터를 int로 형변환이 되도록 하거나
template <typename T, typename T1>
T plus(T i, T1 j)
{
   return i + (int)j;
}
위와 같이 데이터형을 구분할 수 있도록 템플릿을 지정해야 합니다.

0 0