Modern C++ Design Patterns
Design patterns have proven to be useful over several decades and knowledge about them is still very useful to design robust, decoupled systems. Modern C++, however, has profoundly changed the way we use C++, think about design and implement solutions. This hands-on training explores modern C++ design and the modern forms of the classic design patterns. It provides guidelines, idioms and best practices for sustainable and maintainable design, which enable programmers to create professional, high-quality code. Amongst others it will answer the following questions:
- How does good C++ design with a minimum of dependencies look like?
- Why does classical C++ design based on inheritance hierarchies fail so often?
- What advantages does value semantics based design provide?
- How are the classic design patterns realised in modern C++?
- What are alternatives to the classic design patterns?
After this course, participants will …
… have an impression on the modern alternatives of classic design patterns; … have gained knowledge about modern design techniques; … understand how std::function, std::any, and ranges work; … avoid the usual pitfalls in the context of inheritance; … know about the importance of value semantics.
(De-)Motivation: The Perils of Inheritance Hierarchies
Classic Design Patterns Revisited - Command - Prototype - Strategy - Observer - Visitor - Factory - Decorator - Template Method - Singleton
Modern Design Patterns - Type Erasure - CRTP - Expression Templates - Policy Based Design
Klaus Iglberger is a freelancing C++ trainer and consultant. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced C++ courses around the world (mainly in Germany, but also the EU and US). Additionally, he is the initiator and lead designer of the Blaze C++ math library (https://bitbucket.org/blaze-lib/blaze/src/master/) and a (co-)organizer of the Munich C++ user group (https://www.meetup.com/MUCplusplus/).