C++에서는 함수 오버로딩 기능을 더더욱 유용하게 사용할 수 있도록 템플릿 기능을 제공한다.
하지만 템플릿을 사용하게 되면 동일 형태의 함수는 모두 동일한 동작을 수행하게 된다.
만약 특정 몇몇 경우에만 다르게 동작하게 하고 싶을 때에는 어떻게 할 수 있을까?
이때 바로 템플릿 함수에 대한 오버로딩을 통해 특정 몇몇 경우에서는 템플릿 함수의 동작과 다른 동작이 수행되게 할 수 있다.
예를 들어, 더하기 기능을 수행하는 다음과 같은 템플릿 함수가 있다고 하자.
template <typename T>
void add(T param1, T param2)
{
std::cout << "add result : " << param1 + param2 << std::endl;
}
int main(void)
{
add(1, 2);
add(3.4, 4.2);
return 0;
}
add result : 3
add result : 7.6
만약 정수형이 아닌 타입의 연산 결과도 정수형으로 보고 싶다면? 다음과 같이 템플릿 함수를 오버로딩하면 된다.
template <typename T>
void add(T param1, T param2)
{
std::cout << "add result : " << param1 + param2 << std::endl;
}
void add(double param1, double param2)
{
std::cout << "add result : " << static_cast<int>(param1 + param2) << std::endl;
}
add result : 3
add result : 7
T 타입으로 double 타입이 사용될 때 기존의 템플릿 함수와 다르게 동작하여 3.4 + 4.2 연산을 수행한 결과를 정수형으로 casting하여 출력해주고 있음을 볼 수 있다.
'C · C++' 카테고리의 다른 글
[C++] 복사 생성자 (Copy Constructor) (0) | 2023.01.15 |
---|---|
[C++] 템플릿(Template) 함수 (0) | 2022.07.27 |
[C++] 함수 오버로딩(Overloading) (0) | 2022.07.23 |
[C++] Default Arguments (Parameters) (0) | 2022.07.16 |
[C++] 함수의 선언과 구현부 분리 (0) | 2022.07.13 |