본문 바로가기

C++ templates The Complete Guide14

[C++] Tuple 구현 Reference Ch 25, C++ Templates The Complete Guide Contents Basic Tuple Design Basic Tuple Operations Tuple Algorithms Expanding Tuples Optimizing Tuple 튜플은 실행 프로그램 내의 타입 리스트가 표현된 것이라고 볼 수 있다. 예를 들어, 타입 리스트 Typelist이 컴파일 시간에 조작할 수 있는 int, double, std::string을 가진 타입의 시퀀스를 나타내는 것잉라면 Tuple은 실행 시간에 조작할 수 있는 int, double, std::string에 대한 저장 공간을 나타낸다. 이번 포스팅에서는 C++11에 도입된 std::tuple과 유사한 동작하도록 간략한 버전의 T.. 2024. 1. 1.
[C++] 템플릿과 상속 (EBCO, CRTP) References Ch 21, C++ Templates The Complete Guide Contents The Empty Base Class Optimization (EBCO) The Curiously Recurring Template Pattern (CRTP) The Empty Base Class Optimization (EBCO) 비어있는(empty) C++ 클래스는 런타임에서 메모리를 요구하는 내부 표현이 없다는 것을 의미한다. 일반적으로 타입 멤버, nonvirtual 함수 멤버, 그리고 static 데이터 멤버만을 갖는 클래스를 empty class 라고 한다. 반면, nonstatic 데이터 멤버, virtual 함수, 그리고 virtual base 클래스는 런타임에 메모리를 필요로 한다... 2023. 12. 29.
[C++] Typelists Reference Ch 24, C++ Templates The Complete Guide Contents Typelists Typelist Algorithms Nontype Typelists Optimizing Algorithms with Pack Expansions Cons-style Typelist 효과적인 프로그래밍을 위해서는 다양한 데이터 구조가 필요하다. 메타프로그래밍에서도 동일한데, 메타프로그래밍에서 핵심이 되는 데이터 구조는 타입리스트(typelists)이다. 말 그대로 타입을 포함하고 있는 리스트를 의미한다. 템플릿 메타프로그램은 이러한 타입리스트들을 가지고 조작하면서 실행 프로그램 일부를 만들어낼 수 있다. 이번 포스팅에서는 타입리스트를 다루는 기법에 대해서 살펴볼 예정이다. 타입리스트에.. 2023. 12. 23.
[C++] 메타프로그래밍 Reference Ch 23, C++ Templates The Complete Guide Contents The State of Modern C++ Metaprogramming The Dimensions of Reflective Metaprogramming The Cost of Recursive Instantiation Enumeration Values versus Static Constants 메타프로그래밍(metaprogramming)이란 '프로그램을 프로그래밍하는 것'이다. 즉, 실제로 원하는 기능을 구현하는 새로운 코드를 생성하도록 실행되는 프로그래밍 시스템을 작성하는 것이다. 일반적으로 메타프로그래밍이라는 용어는 반사적(reflexive) 속성을 내포한다. 메타프로그래밍 컴포넌트는 일부 코드를.. 2023. 12. 16.
[C++] Traits(특질) 구현 (3) References Ch 19, C++ Templates The Complete Guide Contents If-Then-Else Detecting Nonthrowing Operations Traits Convenience Type Classification Policy Traits If-Then-Else 아래와 같이 정의된 PlusResultT trait는 HasPlusT 라는 다른 traits에 따른 완전히 다른 구현을 가지고 있다. template struct HasPlusT : std::false_type {}; template struct HasPlusT : std::true_type {}; template struct PlusResultT { using Type = decltype(std::d.. 2023. 11. 24.
[C++] Traits(특질) 구현 (2) - SFINAE References Ch 19, C++ Templates The Complete Guide Contents SFINAE-Based Tratis IsConvertibleT Detecting Members SFINAE-Based Tratis SFINAE (substitution failure is not an error; 치환 실패는 에러가 아님) 원칙으로 인해 템플릿 인자를 추론하는 동안 형성되는 유효하지 않은 타입과 표현식은 에러가 아닌 단순히 추론 실패로 취급됩니다. 따라서 다른 오버로딩 후보를 선택할 수 있습니다. 원래 SFINAE는 함수 템플릿 오버로딩에서 발생할 수 있는 가짜 에러를 피하기 위해 도입되었지만, 현재는 특정 타입이나 표현식이 유효한지를 컴파일 과정에 결정할 수 있는 훌륭한 기법으로 .. 2023. 2. 2.
[C++] Traits(특질) 구현 (1) References Ch 19, C++ Templates The Complete Guide Contents Example: Accumulating a Sequence Traits versus Policies and Policy Classes Type Functions 템플릿을 활용하면 다양한 타입으로 클래스와 함수를 파라미터화할 수 있습니다. 템플릿을 타입이나 알고리즘에 맞춰 커스터마이징할 수 있도록 최대한 많은 템플릿 파라미터를 도입하도록 할 수도 있고, 클라이언트 코드의 정확한 니즈를 충족시키도록 템플릿화된 컴포넌트를 인스턴스화시킬 수도 있습니다. 다만, 실질적으로 수십 개의 템플릿 파라미터를 사용하는 것은 그리 좋지는 않습니다. 다행히 왠만한 경우, 추가하고 싶은 파라미터의 대부분은 기본값을 가지고.. 2023. 1. 18.
[C++] 템플릿 특수화(Specialization) References Ch16, C++ Templates The Complete Guide Contents Template Specialization Overloading Function Templates Explicit Specialization Partial Class Template Specialization Partial Variable Template Specialization C++ 템플릿을 사용하여 제너릭한 정의를 사용하여 관련된 클래스, 함수, 또는 변수로 확장할 수 있습니다. 이것만으로도 강력하지만 특정 템플릿 파라미터에서는 제너릭 형태의 연산이 최적이 아닐 수 있습니다. 제너릭 프로그래밍을 지원하는 다른 프로그래밍 언어와 달리 C++에서는 제너릭 정의를 좀 더 특수화된 기능으로 바꾸는 기.. 2023. 1. 15.
[C++] 템플릿 인스턴스화(Instantiation) References Ch14, C++ Templates The Complete Guide Contents On-Demand Instantiation Lazy Instantiation The C++ Instantiation Model Implementation Schemes Explicit Instantiation Compile-Time if Statements 템플릿 인스턴스화(instantiation)는 제너릭 템플릿 정의로부터 타입, 함수, 변수를 생성하는 과정을 말합니다. C++ 템플릿의 인스턴스화 개념은 간단하지만 다소 얽혀져있습니다. 이는 템플릿에 의해 생성된 실체(entities)의 정의가 단 한 곳의 소스 코드로 한정되는 것이 아니기 때문입니다. 템플릿의 위치, 템플릿이 사용된 곳, 템플릿 .. 2023. 1. 11.
[C++] 템플릿 기본 세부사항 References Ch12, C++ Templates The Complete 2nd Contents Parameterized Declarations Template Parameters Template Arguments Variadic Templates Friends [C++] Function Templates [C++] Class Templates [C++] Nontype Template Parameters [C++] Variadic Templates (가변 템플릿) [C++] 템플릿에서 이동의미론과 enable_if [C++] Templates in Practice 앞선 포스팅들에서 템플릿에 대한 기본적인 내용, 즉, 템플릿의 선언, 템플릿 파라미터의 제약, 템플릿 인자의 제약 등에 대해 살펴봤습니다.. 2023. 1. 8.