본문 바로가기

c++53

[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.
[C++] Templates in Practice References Ch9, C++ Templates The Complete Guide Contents The Inclusion Model Templates and inline Precompiled Headers Decoding the Error 템플릿 코드는 일반 코드와 약간 다릅니다. 어떤 측면에서는 매크로와 일반(non-template) 선언의 중간이라고 볼 수도 있습니다. 이번 포스팅에서는 템플릿의 기술적인 부분은 배제하고 실제 어떻게 사용할 수 있는지에 대해서 살펴보려고 합니다. 특히 전통적인 C++ 컴파일 시스템(compiler + linker) 측면에서 어떻게 템플릿 코드를 작성하고, 작성하면서 마주할 수 있는 에러 등에 대해서 살펴봅니다. The Inclusion Model 템플릿 소스 코.. 2023. 1. 5.
[C++] Value Categories (값 카테고리) References Appendix B, C++ Templates The Complete Guide https://en.cppreference.com/w/cpp/language/value_category https://www.scs.stanford.edu/~dm/blog/decltype.html Contents lvalues(좌측값) and rvalues(우측값) Value Categories Since C++11 Check Value Categories with decltype Reference Types 표현식(expressions)은 C++ 언어의 기본 토대이며, 연산을 표현하는 기본적은 메커니즘입니다. 모든 표현식에는 타입이 있으며, 이 타입은 표현식의 연산이 생성하는 값의 정적 타입(static.. 2023. 1. 3.
[C++] 템플릿에서 이동의미론과 enable_if<> References Ch6, C++ Templates The Complete Guide Contents Perfect Forwarding Special Member Function Templates std::enable_if C++11에서 도입된 중요한 특징 중 하나가 바로 이동의미론(move semantics) 입니다. 이를 통해 원본 객체 내의 리소스를 다른 객체로 복사하는 것이 아닌 이동시켜 복사 및 할당을 최적화할 수 있습니다. 이는 원본 객체의 내부 값이나 상태가 복사한 뒤 더 이상 필요하지 않을 때 사용할 수 있습니다. 이동의미론이 도입되면서 템플릿 디자인에 많은 영향을 미쳤는데, 제너릭 코드에서 이동의미론을 지원하기 위해 특별한 규칙들도 도입되었습니다. 이번 포스팅에서는 이에 대해서 살펴보도.. 2023. 1. 2.
[C++] Variadic Templates (가변 템플릿) References ch4, C++ Template The Complete Guide Contents Variadic Templates Fold Expressions Application of Variadic Templates Variadic Class Templates and Variadic Expressions C++11부터 템플릿에서도 가변 템플릿 인자를 받을 수 있는 파라미터를 사용할 수 있습니다. 임의의 타입을 갖는 임의의 수의 인자를 전달할 때 사용할 수 있습니다. Variadic Templates 정해지지 않은 수의 템플릿 인자를 템플릿 파라미터로 정의할 수 있는데, 이와 같은 기능의 템플릿을 가변 템플릿(variadic templates)라고 부릅니다. Example 예를 들어, 서로 다른.. 2022. 12. 31.
[C++] Nontype Template Parameters References ch3, C++ Templates The Complete Guide Contents Nontype Class Template Parameters Nontype Function Template Parameters Restrictions for Nontype Template Parameters Template Parameter Type auto [C++] Function Templates [C++] Class Templates 함수와 클래스 템플릿에서 템플릿 파라미터가 반드시 타입일 필요는 없으며, 일반적인 값일 수도 있습니다. 타입 파라미터를 사용하는 템플릿을 사용한다면 코드가 실제로 사용되기 전까지 특정 세부 구현이 결정되지 않은 채로도 코드를 정의할 수 있습니다 (템플릿은 실제로 사.. 2022. 12. 30.
[C++] Class Templates References Ch2, C++ Templates The Complete Guide 2nd Contents Stack 클래스 템플릿 구현 및 사용, 부분 사용 Friends Specialization (특수화) Partial specialization Default class template arguments Type aliases Class template argument deduction Templatized aggregates [C++] Function Templates 지난 포스팅인 함수 템플릿에 이어서 이번 포스팅에서는 클래스 템플릿에 대해서 살펴보도록 하겠습니다. 클래스도 함수처럼 하나 이상의 타입으로 파라미터화될 수 있는데, 특정 타입의 요소를 관리하는 STL의 컨테이너 클래스가 이러한 .. 2022. 12. 29.