템플릿을 그저 겉핥기 식으로 공부한 것 같아서 다시 공부를 하고 있는데 템플릿으로 오버로딩 할 생각은 하지 않았던 것 같다.
일반함수처럼 함수 템플릿도 오버로딩 할 수 있다.
여기서 중요하게 봐야할 점은 템플릿이 아닌 일반함수가 우선 순위가 높다는 것이다.
#include <iostream>
int plus(int a, int b)
{
std::cout<<"int plus() 일반 함수 호출"<<std::endl;
return a + b;
}
template <typename T>
T plus(T a, T b)
{
std::cout << "template plus(T a, T b) 템플릿 함수 호출" << std::endl;
return a + b;
}
template <typename T>
T plus(T a, T b, T c)
{
std::cout << "template plus(T a, T b, T c) 템플릿 함수 호출" << std::endl;
return a + b + c;
}
int main()
{
plus(1, 2); // 일반 함수 호출
plus<>(1, 2); // template plus(T a, T b) 템플릿 함수 호출
plus<double>(1, 2, 3); // template plus(T a, T b, T c) 템플릿 함수 호출
plus('a', 1); // 일반 함수 호출
plus('a', 'b'); // template plus(T a, T b) 템플릿 함수 호출
return 0;
}
/*
출력 결과
int plus() 일반 함수 호출
template plus(T a, T b) 템플릿 함수 호출
template plus(T a, T b, T c) 템플릿 함수 호출
int plus() 일반 함수 호출
template plus(T a, T b) 템플릿 함수 호출
*/