-
매개변수
- 타입 매개변수(Type parameter)
- 비타입 매개변수(Non-Type parameter)
-
템플릿 메타 프로그래밍(template metaprogramming : TMP)
-
컴파일 도중에 실행되는 템플릿 기반의 프로그램을 작성하는 일.
- 1. C++ 컴파일러가 TMP 프로그램 실행
- 2. 템플릿에서 인스턴스화된 C++ 소스 코드
- 3. 컴파일
-
템플릿 클래스를 이용한 ThreadSafe Lock 만들기
-
CLockObject
- CDummyLock
- CCriticalSectionLock
- CMutexLock
- CSemaphore
-
CScopedLock(CLockObject *pLock)
- Lock()
- UnLock()
-
CQue<T,Lock = CDummyLock>
- Lock m_LockObject;
-
예제
- CQue
-
템플릿을 사용하는 목적(왜 템플릿이 필요한가?)
- 예제코드
-
장점
-
1. 코딩시간 절약
- Logic이 동일하고 타입만 다른 함수나 클래스를 한번만 작성하면 된다.
-
2. 코드 중복 회피
- 템플릿 인스턴스화에 필요한 타입의 코드만 생성된다.
-
단점
-
1. 코드 비대화(code bloat)
-
명시적인 중복을 제거
- 공통성 및 가변성 분석(commonality and variability)
- 암시적인 중복(템플릿 코드)을 제거
-
기본 템플릿(Primary template)
- 기본 템플릿 클래스
-
특수화(Specialization)
-
예제
- 명시적 템플릿 완전 특수화
- 명시적 템플릿 부분 특수화
-
특수화의 의미
-
템플릿 매개변수를 특정한 인수들로
치환해서 생긴 실체 클래스나 함수
- 클래스 템플릿
- 함수 템플릿
-
특수화의 종류
-
완전 특수화(full specialization)
-
명시적 특수화(explicit specialization)
- 특수화의 특성상 템플릿 매개변수를
명시적으로 치환하기 때문에 템플릿 특수화는 모두 명시적 특수화 이다.
- 부분 특수화(partial specialization)
-
인스턴스화(Instantiation)
-
컴파일러가 템플릿에 대한 정보(멤버이름, 기반클래스 이름 등..)를 알아야 하는 순간 인스턴스화 된다.
- 1. 컴파일러는 모든 템플릿의 인수값을 채운다.
- 2. 가장 일치하는 명시적 특수화, 부분적 특수화를 찾는다.
- 3. 템플릿 본문의 선언에 쓰이는 모든 형식과 상수 파악.
- 4. 선언에 오류가 없는지 점검.