1. template
함수 템플릿
- 함수의 일반화된 버전을 작성하는 것
- 함수의 매개변수나 리턴타입을 일반화된 형태로 선언하고, 이를 특정한 타입으로 대체하여 함수를 인스턴스화한다.
- 특정 타입에 대해 재사용이 가능하다.
template<typename T>
T function(T arg1, T arg2){
}
- 명시적 특수화: 특정 타입에 대해 명시적 특수화를 제공, 해당 타입에 대해 특별한 동작을 수행하도록 정의
- 컴파일러는 호출된 함수에 정확히 대응하는 특수화된 정의를 발견하면, 더는 템플릿을 찾지 않고 해당 정의를 사용한다.
template<>
return_type function<specific_type>(arguments){
}
클래스 템플릿
- 클래스의 멤버 변수, 멤버 함수, 타입을 일반화된 형태로 선언
template<typename T>
class className{
}
- 중첩 클래스 템플릿: 클래스 내부에 정의된 클래스 템플릿
template<typename T>
class Outer{
template<typename U>
class Inner{
}
}
template<>
class className<specific_type>{
}
2. pair
- #include<utility> 헤더파일에 존재
- 생성 방식: make_pair(자료형, 자료형)
- 선언 방식: pair<자료형, 자료형> p;
- first: 첫 번째 인자 반환, second: 두 번째 인자 반환