C++ is no longer C with classes and it never was just an Object-Oriented language. C++ is a general-purpose programming language. It has procedural, object-oriented, and generic programming features while also providing facilities for low-level memory manipulation. If used correctly, it provides hard-to-beat performance.
Such usage requires a good knowledge of C++ templates and Modern C++ Idioms which are much different from commonly known design patterns popularized by GoF book and invented to handle common use cases in pure OO languages like Java or C#. Learning C++-specific idioms will allow us to build powerful tools that are useful in the everyday work of every C++ developer. The hands-on part of the workshop will cover RAII, Copy-and-Swap, Smart Pointer, Type Traits, Policy-based Design, EBO, Type Erasure, CRTP, and other popular C++ Idioms.
The training targets C++ developers and code architects who want to improve their skills in implementing general-purpose tools.
This course is a subset of a longer Modern C++ Design: Part II - Guidelines, Idioms, and (Anti)Patterns training. If you have already taken the other one or intend to, you should probably skip this training.
TRAINING HIGHLIGHTS
- Learning Modern C++ idioms and their use cases
- Particular focus on the usage of "C++ templates" in practical tasks
TRAINING AGENDA
The following plan is an initial proposal for the training material. The final agenda is always created based on the individual pre-training analysis of the client's requirements and constraints.
- C++ Basics in a nutshell
- C++ Types
- Value Categories
- Name Lookup
- Swap
- Range-based for loop
- Special Member Functions
- Exception Safety
- C++ Templates in a nutshell
- C++ template definition
- Template parameters
- Template specialization
- Modern C++ Idioms
- Non-Movable
- RAII
- Copy-and-swap
- Smart Pointer
- type_identity
- Type Traits
- Tag dispatch
- Policy-based design
- EBO
- Type Erasure
- SOO
- Copy-on-write
- CRTP
- Barton-Nackman Trick
- Singleton
- Customization point object (Niebloid)
- Mixin