[#13 열혈강의 C++]
2021-07-22
[Chapter 14] 템플릿2
```
dddd
```
클래스 템플릿의 특수화
template < >
class SoSimple < int > {
public:
int SimpleFunc (int num) { --- }
};
int 형에 대해서 특수화가 되고 난후 SoSimple < int > obj 객체생성 시, SoSimple < int > 대상으로 객체가 생성된다.
부분 특수화
template < typename T1 >
class MySimple < T1, int > { --- }
-> T2 하나에 대해서만 int 형으로 특수화 시킨 것이다.
=> 특수화는 전체 특수화가 부분특수화보다 우선순위가 높다.
템플릿 인자
=> 템플릿 매개변수에 전달되는 자료형 정보를 말한다.
템플릿 매개변수에 변수 선언이 가능하다.
->
template < class T, int len >
class SimpleArray {
private :
T arr[len];
public :
T & operator[] (int idx) { return arr[idx]; }
};
-> SimpleArray <int , 5> i5arr;
-> SimpleArray <double, 7 > d7arr; 로 객체 생성 가능하다.
이 두 템플릿 클래스는 서로 다른 자료형의 클래스로 ㄱ부ㅜㄴ된다.
=> 매개변수에 디폴트 값도 지정가능하다. 이 떄 객체생성시에는 < > 안에 비우더라도 이 기호는 반드시 작성해야한다.
함수 템플릿과 static 지역변수
-> static 변수는 딱 한번 초기화된상태에서 그 값을 계속 유지하는 특성
->
template < class T >
void Show ( void ) {
static T num = 0;
num += 1; }
->
Show < int > ( ) ; //1
Show < int > ( ); // 2
Show < double > ( ) ; //1
Show <double > ( ) ; //2
=> 템플릿 함수별로 static 지역변수가 각각 존재한다는 것을 알 수 있다.
=> static 멤버변수는 변수가 선언된 클래스의 객체 간 공유가 가능하다.