로또
Template 본문
정의
매개 변수의 type에 따라 함수를 생성하는 매커니즘
Type마다 별도의 함수를 만들지 않고 여러 type에서 동작할 수 있는 하나의 함수를 작성할 수 있다.
이는 입력한 템플릿을 기반으로 컴파일러가 생성하므로 생성된 함수라고도 불린다.
클래스에도 동일하게 적용 가능하다.
템플릿 함수
#include <iostream>
using namespace std;
template <typename T>
T add(const T& a, const T& b){
return a + b;
}
int main(){
int ia = 1;
int ib = 2;
cout << add(ia, ib) << endl;
double da = 3.14;
double db = 1.592;
cout << add(da, db) << endl;
string sa = "Hello";
string sb = "World";
cout << add(sa, sb) << endl;
return 0;
}

위처럼 하나의 함수 add()에 대해서 int, double, string 등 다양한 type의 parameter를 사용해 정상적으로 동작하는 것을 볼 수 잇다.
템플릿 함수의 특수화
#include <iostream>
using namespace std;
// 템플릿 함수
template <typename T>
void Func(const T& a, const T& b){
cout << "템플릿 함수" << endl;
}
// 특수화 템플릿 함수
// double type에 대해서 특수화.
template < >
void Func(const double& a, const double& b){
cout << "특수화 템플릿 함수" << endl;
}
int main(){
int ia = 1;
int ib = 2;
Func(ia, ib);
double da = 3.14;
double db = 1.592;
Func(da, db);
string sa = "Hello";
string sb = "World";
Func(sa, sb);
return 0;
}
위에는 이름이 같은 두 개의 템플릿 함수가 존재한다.
template <typename T> void Func(const T& a, const T& b); // 첫번째 Func()
template < > void Func(const double& a, const double& b); // 두번째 Func()
위의 코드에서 Func(ia, ib)나 Func(sa, sb)를 호출할 때는, double type이 아니므로 당연히 첫번째 Func()를 호출할 것이다.
하지만 Func(da, db)의 경우, 컴파일러 입장에서는 호출 가능한 두 개의 함수가 존재한다.
두번째 Func()는 특수화된 템플릿 함수로, double type을 가지는 함수 호출에 대해서는 프로그래머가 별도로 정의한 것이다. 때문에 일반 템플릿 함수보다 높은 우선순위를 가져 다음과 같은 호출 결과를 보인다.

만약, 템플릿 함수가 아닌 일반 함수가 존재한다면,
즉, void Func(const double& a, const double& b)가 존재한다면 일반 함수가 더 높은 우선 순위를 가진다고 한다.
자료 조사를 하던 중 이해하기 쉬운 말이 있어 인용한다.
위의 template< > 명령은 다음과 같다고 한다.
"double type 변수에 대해서는 프로그래머가 직접 제시하니, double type 템플릿 함수가 필요한 경우 별도로 생성하지 말고 프로그래머가 만든 템플릿 함수를 사용하여라."
참고 자료
https://www.tcpschool.com/cpp/cpp_template_function
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
https://nomad-programmer.tistory.com/367
[Programming/C++] 함수 템플릿과 특수화(Specialization)
함수 템플릿과 템플릿 함수 다음의 정의를 가리켜 '함수 템플릿(Function Template)' 이라 한다. template T Add(T num1, T num2) { return num1 + num2; } 반면 위의 템플릿을 기반으로 컴파일러가 만들어 내는 다음
nomad-programmer.tistory.com
https://m.blog.naver.com/vjhh0712v/221553593414
C++ 템플릿(Template), 템플릿 함수, 특수화
이번 포스팅은 C++의 템플릿 개념에 대해 알아보도록 하겠습니다. 그 중에서 가장 많이 사용되고 있는 템...
blog.naver.com