C++

[#13 열혈강의 C++]

Kmentor 2021. 7. 24. 01:53

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  멤버변수는 변수가 선언된 클래스의 객체 간  공유가 가능하다.