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 = .. EBO (Empty Base Optimization) EBO는 상속관계에서 이야기되며, 빈 클래스를 상속할 때 발생하는 메모리 최적화를 말한다. (EBCO 라고도 불린다)이 때, "빈 클래스" 라는 것은 가상 함수와 멤버 변수가 없는 클래스를 의미한다. (C++ 클래스 메모리 구조 참고) class EmptyClass { void interface() { ... } };int main() { EmptyClass objects[10]; cout 평상시에는 생성된 객체들에 대한 식별을 보장하기 위해 빈 클래스의 크기를 0이 아닌 값으로 할당한다. 위의 코드를 예시로 들어보면, 만약 EmptyClass의 크기가 0이라면 배열을 통해 각 객체들을 식별할 수 없을 것이다.따라서, 객체 고유성 유지를 위해 빈 클래스의 크기를 0이 아닌 값으로 할.. 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.. [C++14] Digit Separator (자리 구분자) C++14에 새로 생긴 Language Feature로, 숫자인 상수들의 자리수를 쉽게 구분할 수 있게 도와준다.현실 세계에서는 쉼표 (,) 로 구분하는 자리 구분 기호를 C++14에선 작은 따옴표 (') 를 사용하여 표기할 수 있다. int main() { int b = 0b0000'0110'1001; // == 105 int i1 = 10'000'000; // == 10000000 int i2 = 1'75'438'7512; // == 1754387512 double f = 0.00'00'00'01; // == 0.00000001 return 0;} 위의 예제에서 볼 수 있듯이 모든 숫자 상수에서 사용 가능하며 값.. [C++14] Binary Literal (이진 상수) C++14에 새로 생긴 Language Feature로, 2진수 상수를 직접 작성할 수 있다. 상수 선언 시 접두사로 "0b" 혹은 "0B" 를 붙여주어 사용한다. int main() { int binNumber1 = 0b00001000; // == Decimal 8 int binNumber2 = 0B00001101; // == Decimal 13 return 0; } + 8진수나 16진수도 가능하다. 8진수: 상수 선언 시 접두사로 '0' 사용 16진수: 상수 선언 시 접두사로 "0x" 혹은 "0X" 사용 * 16진수의 경우 대/소문자를 구분하지 않는다 (섞어 써도 상관 없다) int main() { int octNumber = 075; // == Decimal 61 int hexNumber1 = 0x.. [C++14] Variable Template (변수 템플릿) C++14에 새로 생긴 Language Feature로, 어떤 변수에 대해서 템플릿화 할 수 있다. // 변수 템플릿 template constexpr T PI = static_cast(3.1415926535897932); // 변수 템플릿 특수화 template constexpr const char* PI = "PI"; int main() { cout 이전 1 2 다음