Chapter 14. 템플릿(Template) 2 윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 14. 템플릿(Template) 2
Chapter 14-1. Chapter 13에서 공부한 내용의 확장 윤성우의 열혈 C++ 프로그래밍 Chapter 14-1. Chapter 13에서 공부한 내용의 확장 윤성우 저 열혈강의 C++ 프로그래밍 개정판
Point 클래스 템플릿과 배열 클래스 템플릿 윤성우의 열혈 C++ 프로그래밍 일반적인 배열 클래스 템플릿 BoundCheckArray<int> iarr(50); BoundCheckArray<Point<int>> oarr(50); BoundCheckArray<Point<int>*> oparr(50); typedef Point<int>* POINT_PTR; BoundCheckArray<POINT_PTR> oparr(50); int형 데이터 저장 배열 Point<int> 객체 저장 배열 Point<int>형 포인터 저장 배열 Point<int>형 포인터 저장 배열
템플릿 클래스 대상의 함수선언과 friend 선언 윤성우의 열혈 C++ 프로그래밍 컴파일러가 생성해 내는 템플릿 클래스를 함수의 매개변수 및 반환형으로 지정하는 것도 가능하고 이러한 함수를 대상으로 friend 선언을 하는 것도 가능하다. 결론은 컴파일러가 생성하는 템플릿 클래스의 이름도 일반 자료형의 이름과 차별을 받지 않는다는 것!
윤성우의 열혈 C++ 프로그래밍 Chapter 14-2. 클래스 템플릿의 특수화 윤성우 저 열혈강의 C++ 프로그래밍 개정판
클래스 템플릿 특수화 윤성우의 열혈 C++ 프로그래밍 SoSimple 클래스 템플릿에 대해서 int형에 대한 특수화 √ 클래스 템플릿을 특수화하는 이유는 특정 자료형을 기반으로 생성된 객체에 대해, 구분이 되는 다른 행동양식을 적용하기 위함이다. √ 함수 템플릿을 특수화하는 방법과 이유, 그리고 클래스 템플릿을 특수화하는 방법과 이유는 동일하다.
클래스 템플릿의 부분 특수화 윤성우의 열혈 C++ 프로그래밍 MySimple 클래스 템플릿 MySimple 클래스 템플릿의 <char, int>에 대한 특수화 MySimple 클래스 템플릿의 <T1, int>에 대한 부분적 특수화 T2가 int 인 경우에는 MySimpe<T1, int>를 대상으로 인스턴스가 생성된다. 위와 같이 <char, int>형으로 특수화, 그리고 <T1, int> 에 대해서 부분 특수화가 모두 진행된 경우 특수화가 부분 특수화에 앞선다. 즉, <char, int>를 대상으로 객체 생성시 특수화된 클래스의 객체가 생성된다.
윤성우의 열혈 C++ 프로그래밍 Chapter 14-3. 템플릿 인자 윤성우 저 열혈강의 C++ 프로그래밍 개정판
템플릿 매개변수에는 변수의 선언이 올 수 있습니다. 윤성우의 열혈 C++ 프로그래밍 SimpleArray<int, 5> i5arr; SimpleArray<int, 5>형 템플릿 클래스 템플릿의 인자로 변수의 선언이 올 수도 있다! 템플릿 인자를 통해서 SimpleArray<int, 5>와 SimpleArray<int ,7>이 서로 다른 자료형으로 인식되게 할 수 있다. 이로써 SimpleArray<int, 5>와 SimpleArray<int, 7> 사이에서의 연계성을 완전히 제거할 수 있다. SimpleArray<double, 7> i7arr; SimpleArray<double, 7>형 템플릿 클래스
템플릿 매개변수는 디폴트 값 지정도 가능합니다. 윤성우의 열혈 C++ 프로그래밍 template <typename T=int, int len=7> class SimpleArray { private: T arr[len]; public: T& operator[] (int idx) { return arr[idx]; } SimpleArray<T, len>& operator=(const SimpleArray<T, len> &ref) for(int i=0; i<len; i++) arr[i]=ref.arr[i]; } }; 디폴트 값 지정 가능! int main(void) { SimpleArray<> arr; for(int i=0; i<7; i++) arr[i]=i+1; cout<<arr[i]<<" "; cout<<endl; return 0; } T에 int, len에 7의 디폴트 값 지정! 실행결과
윤성우의 열혈 C++ 프로그래밍 Chapter 14-4. 템플릿과 static 윤성우 저 열혈강의 C++ 프로그래밍 개정판
함수 템플릿과 static 지역변수 윤성우의 열혈 C++ 프로그래밍 실행결과
클래스 템플릿과 static 멤버변수 윤성우의 열혈 C++ 프로그래밍 SimpleStaticMem<int>의 mem은 SimpleStaticMem<int>의 개체간 공유 SimpleStaticMem<double>의 mem은 SimpleStaticMem<int>의 개체간 공유
template<typename T> vs. template<> 윤성우의 열혈 C++ 프로그래밍 템플릿임을 알리며 T가 무엇인지에 대한 설명도 필요한 상황 템플릿과 관련 있음을 알리기만 하면 되는 상황 static 멤버 초기화의 특수화
Chapter 14가 끝났습니다. 질문 있으신지요?