템플릿
- 자료형이 정해져 있지 않고 기능만 정해져 있는 툴
함수에서 매개변수랑 선언부에 형식이 선언돼있지 않다고 생각하면 됨
- 매크로는 잘못 만들어도 에러가 나거나 경고가 뜨지 않아서 어디가 잘못됐는지 알기 힘들다. 하지만 템플릿은 비슷한 기능을 하면서도 에러는 컴파일러에서 잡아준다는것!
- 템플릿은 사용할때 생성되고 다 쓰면 바로 소멸돼서 입력값을 레퍼런스를 써야 call by value 에서 원본을 조작할 수 있다.
함수 템플릿
함수처럼 생긴 템플릿
템플릿 선언
template<typename T>
T Add(t src, T tmp)
{
return src + tmp;
}
- 입력받는 자료형에 따라 예외처리를 하는 특수화 기능이 있다.
template<>
char* Add(char src, char tmp)
{
cout << "문자열은 합치지 못해!" << endl;
return false;
}
클래스 템플릿
클래스처럼 생긴 템플릿
함수가 여러 개 들어있는 경우도 있어서 부분 특수화도 된다.
템플릿 비대화
- 템플릿을 새로운 타입으로 호출할 때마다 별도의 코드가 컴파일 타임에 생성된다.
따라서 다양한 타입으로 호출하면 코드 크기가 커진다.
- 꼭 필요한 타입으로만 사용하도록 하자.