본문 바로가기

Programming/C++ Template

(3)
Type Selection 어떤 조건에 따라 컴파일 타임에 두 개의 타입 중 하나를 선택 가능하게 해주는 도구다.C++ 표준에서는 std::conditional 으로 제공된다. (C++11 이상) template struct IF { using type = B; };template struct IF { using type = A; };template using IF = typename IF::type; 위와 같이 템플릿 부분 특수화를 사용하여 구현된다. 동작 기준은 템플릿 인자 Condition이 결정한다.템플릿 인자 Condition의 값이 true이면 A 타입이 선택되고, false이면 B 타입이 선택된다.   template struct IF { using type = ..
CRTP (Curiously Recurring Template Pattern) 클래스 템플릿인 기반 클래스에 유도 클래스의 형식을 템플릿 인수로 전달하는 패턴을 말한다. template class Base { ... };class Derived: public Base { ... }; 가장 간단한 예시를 들어보자면 위와 같은 패턴으로 형성된다.Derived Class는 Base Class를 상속하는데 템플릿 인수로 자기 자신인 Derived Class를 넘겨주고 있다. 간단한 사용 예시는 문제 발생 코드를 조금씩 해결하는 과정인 아래 코드들에서 확인할 수 있다. class Animal { public: ... void goBark() { bark(); } void bark() { cout  위의 코드를 실행시켜보면 당연히 An..
Thin Template 기법 클래스 템플릿이 인스턴스화 하여 Object로 생성되면 동일한 역할을 하는 중복 함수가 생성될 수 있다.이 중복되는 함수들을 없애서 메모리 사용량을 줄여주는 방식을 Thin Template 기법 이라고 한다. // Thin Template 적용 전template class Stack { public: ... void push(const T& data) { ... } void pop() { ... } unsigned int size() { return mSize; } bool isEmpty() { return mSize == 0; } ... private: unsigne..