클래스 템플릿
템플릿 종류
1) 함수 템플릿
2) 클래스 템플릿
이번에는 클래스 템플릿에 대해 알아보자.
기본적으로 클래스 템플릿 또한 함수 템플릿과 크게 다르지 않다.
typename T를 선언하여 어떠한 타입도 받아줄 수 있게 만들어줬다.
이미지 1-1 22번과 30번 라인 같은 경우 Random 클래스 객체를 생성할 때 어떠한 타입인지 컴파일러가
알 수 없으니 명시적으로 인자 타입을 따로 넣어준 모습니다.
여기서 주의할 점은 무조건 typename을 붙여야 하는 건 아니다.
필요하다면 template<> 안에 typename 이외에 것을 넣어줄 수 있다.
이미지 2-1을 보면 template<> 안에 size를 받아주는 것을 볼 수 있다.
즉 사용자가 원하는 만큼의 크기를 외부에서 받아주는 것이다.
이미지와 같은 방식 이외에 기본 값을 설정해 줄 수도 있다.
ex) template<typename T, int size = 10>
이런 식으로 클래스 템플릿을 사용해서 Random 클래스를 a1과 a2 객체로 만들어서 각각 사용하고 있는데
중요한 점은 a1 클래스와 a2 클래스는 완전 다른 클래스이다. 같은 Random 클래스를 사용해서 객체를 생성해주었지만
템플릿 인자가 서로 다르기 때문에 둘은 각각 따로 만들어진 다른 클래스인 것이다.
템플릿 인자가 완벽히 같다면 동일한 클래스로 본다.
템플릿 특수화
함수 템플릿 때와 마찬가지로 템플릿 특수화를 적용할 수 있다.
일반적인 템플릿 규칙 이외에 다른 규칙을 적용하고 싶을 때, 즉 예외를 만들고 싶을 때 사용할 수 있다.
고정적인 인자 타입을 사용할 것이기 때문에 라인 19번에 typename T를 없애주었고
특수한 상황임을 알리기 위해서 Random 클래스명 옆에 인자 타입과 사이즈를 추가해 주었다.
이후에 double 인자 타입이 사용된다면 설정한 특수 규칙이 실행될 것이다.
'프로그래밍 언어 공부 > C++' 카테고리의 다른 글
STL - list (0) | 2022.07.08 |
---|---|
STL - vector (0) | 2022.07.05 |
템플릿 기초 - 함수 템플릿 (0) | 2022.07.04 |
함수 객체 (0) | 2022.07.03 |
함수 포인터 / typedef (0) | 2022.07.03 |