뚜둔뚜둔✩

판다의 개발일지

C · C++

[C++] 템플릿 함수 오버로딩 (Template Function Overloading)

2023. 7. 2. 20:04

C++에서는 함수 오버로딩 기능을 더더욱 유용하게 사용할 수 있도록 템플릿 기능을 제공한다.

하지만 템플릿을 사용하게 되면 동일 형태의 함수는 모두 동일한 동작을 수행하게 된다.

만약 특정 몇몇 경우에만 다르게 동작하게 하고 싶을 때에는 어떻게 할 수 있을까?


 

[C++] 템플릿(Template) 함수

C++에서는 함수의 오버로딩이 가능하다. [C++] 함수 오버로딩(Overloading) C언어와 달리 C++에서는 함수의 인자(parameter) 타입이나 개수가 다르면 동일한 이름의 함수를 여러 개 만들 수 있다. 이를 함

pandas-are-bears.tistory.com

 

[C++] 함수 오버로딩(Overloading)

C언어와 달리 C++에서는 함수의 인자(parameter) 타입이나 개수가 다르면 동일한 이름의 함수를 여러 개 만들 수 있다. 이를 함수 오버로딩이라 한다. int func(int param1); int func(char param1); int func(int param

pandas-are-bears.tistory.com


이때 바로 템플릿 함수에 대한 오버로딩을 통해 특정 몇몇 경우에서는 템플릿 함수의 동작과 다른 동작이 수행되게 할 수 있다.

 

예를 들어, 더하기 기능을 수행하는 다음과 같은 템플릿 함수가 있다고 하자.

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하여 출력해주고 있음을 볼 수 있다.