템플릿
: 함수를 찍어내기 위한 형틀
일반화 프로그래밍
일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법
템플릿 함수
- 모든 템플릿은 헤더
- 컴파일 X
template <typename T>
T get_max(T x, T y){
if(x > y) return;
else return y;
}
- 특수화
- 예외 템플릿 함수
- 우선순위 높음
template <class T>
void increase(T& v) { v += 1; }
// 템플릿 특수화
template <>
void increase(int *& v) { v += 2; }
- 중복
- 템플릿은 헤더이므로 아직 만들어지지 않았음
- 만들어진 중복 함수가 있다면 해당 함수부터 부름
template <class T>
void increase(T& v) { v += 1; }
// 템플릿 특수화
template <>
void increase(int *& v) { v += 2; }
// 함수 중복
void increase(int *& v) { v += 3; }
클래스 템플릿
클래스를 찍어내는 틀
- 클래스를 사용하는 코드에 따라서 실제 클래스를 만들어야하기 때문에 템플릿 클래스의 선언과 정의는 그 클래스를 사용하는 소스 코드에 포함되어 함께 compile 되어야 함
template<class T>
class Box {
T data;
public:
Box(){}
void set(T value){ data = value; }
T get(){ return data; }
};
int main(){
Box<int> b1;
b1.set(100);
cout << b1.get() << endl;
Box<double> b2;
b2.set(3.14);
cout << b2.get() << endl;
return 0;
}
- 클래스 외부에 멤버 함수 정의할 때, 매번 템플릿 코드 선언
template<class T>
class Box {
T data;
public:
Box(;
void set(T value(;
T get();
};
template<class T>
Box<T>::Box(){}
template<class T>
void Box<T>::set(T value){ data = value; }
template<class T>
T Box<T>::get(){ return data; }
728x90
반응형
'C++' 카테고리의 다른 글
[C++] 컨테이너 (0) | 2024.04.30 |
---|---|
[C++] STL (1) | 2024.04.30 |
[C++] Exceptions (0) | 2024.04.30 |
[C++] Polymorphism (0) | 2024.04.30 |
[C++] Inheritance (1) | 2024.04.30 |