Welcome to the first C++ Serbia Workshop Day!

This is a new chapter for the C++ Serbia user group. So far we have organized regular monthly gatherings, and from now on we will organize workshops from time to time with the aim of supporting growth and knowledge within our community.

We are very pleased to announce Klaus Iglberger as our first lecturer in the workshop series.

The workshop will take place on April 12th. This is an on-site event only. The event is free of charge for all participants, but the number of participants is limited.

Registration is closed!

Workshop summary

The design plays a much more central role in the success of a project than any feature could ever do. Good software is not primarily about the proper use of any feature; rather, it is about solid architecture and design. Good software design can tolerate some bad implementation decisions, but bad software design cannot be saved by the heroic use of features (old or new) alone.

~Klaus Iglberger, C++ Software Design

This workshop gives an introduction to software design and provides guidelines, idioms and best practices for sustainable, maintainable design. It explains why dependency management plays such a vital role, but also shows how to manage dependencies by means of design patterns. It highlights why design patterns have proven to be useful over several decades and why knowledge about them is still very useful to design robust, decoupled systems. In particular, however, it demonstrates how modern C++ has changed the way we think about design and implement solutions.


  • Motivation: The Vital Role of Software Design
  • From Reference Semantics to Value Semantics
    • Visitor: The classic GoF implementation
    • Visitor: The modern C++ implementation
  • Value-Semantics-Based Object-Oriented Programming
    • Strategy: The classic GoF implementation
    • Strategy: The modern C++ implementation
    • Prototype
    • Bridge (inkl. the “fast pimpl” idiom)
    • External Polymorphism
    • Type Erasure


  • Software Requirements

    There is no requirement on the operating system. The programming exercises work on Windows, Linux or MacOS. For the programming exercises, participants must be provided with a C++20 compiler or should use an online C++ compiler (e.g. wandbox.org). Additionally, for Windows with Visual Studio CMake is required to generate the according VS solutions.

  • Previous Knowledge

    Participants are required to have roughly two to three years of C++ experience. The course expects that all participants are familiar with the syntax of the language and have used inheritance and templates before.

KlausIglberger Klaus Iglberger is a freelance C++ trainer and consultant. He shares his expertise in popular C++ courses — from beginner to advanced — all around the world. He is the author of “C++ Software Design”, one of the organizers of the Munich C++ user group, and the (co-)organizer of the Back-to-Basics and Software Design tracks at CppCon.