Modern C++ Design Patterns

Klaus Iglberger

workshop
intermediate

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.

C++
design patterns
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

Book now

Klaus Iglberger

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/).