Writing correct C++ is one thing; writing software that is maintainable, extensible, and efficient at scale is quite another. This advanced course goes beyond syntax to focus on the principles, idioms, and design patterns that separate professional C++ from code that merely compiles. It covers API design and type safety, advanced generic programming with templates and C++20 concepts, classic design patterns in their modern C++ idioms, type erasure as a value-semantic alternative to dynamic polymorphism, and the fundamental distinction between value and reference semantics – giving experienced developers a systematic toolkit for high-quality software architecture.
This course requires substantial C++ experience in C++ programming (at least two to three years of practical experience). To start gathering experience, consider taking the C++ for Beginners course.
Level: Advanced
Language: English
Price and Eligibility: Refer to the registration page for each event (generally free of charge for members of academia from Europe).
Knowledge
- At least two to three years of practical C++ experience, including solid knowledge of classes, templates, inheritance, and the standard library (std::vector, std::unique_ptr, etc.)
- Familiarity with the C++ compilation model (headers, source files, link step)
Technical
- A local C++ development environment with a compiler supporting C++17 or later (GCC, Clang, or MSVC) under Windows, Linux, or macOS; a compatible editor or IDE such as VS Code, CLion, or similar
After completing this course, you will be able to:
- Apply established design principles to produce maintainable and extensible C++ code
- Design clean APIs using appropriate function parameters, return types, and constructor strategies
- Improve type safety using strong types and constexpr
- Design class hierarchies using object-oriented techniques including polymorphism and virtual dispatch
- Write generic, reusable components using templates, type traits, SFINAE, forwarding references, and C++20 concepts
- Recognize and implement classic design patterns (Visitor, Strategy, Bridge, External Polymorphism) in modern C++ idioms
- Apply type erasure to achieve value-semantic abstractions without inheritance
- Distinguish value semantics from reference semantics and reason about their design and performance implications
- Critically evaluate code for maintainability and performance trade-offs
- Design principles: SOLID and goal-oriented software design
- API design: function parameters, return types, constructor design, strong types, and constexpr
- Object-oriented design: inheritance hierarchies, virtual dispatch, and interface-based programming
- Advanced generic programming: templates, type traits, SFINAE, forwarding references, and C++20 concepts
- Classic design patterns in modern C++: Visitor, Strategy, Bridge, and External Polymorphism
- Type erasure: value-semantic abstractions without inheritance
- Value semantics vs. reference semantics
- 2026, Oct 7-9: three-day online course (Register)
- 2025, Sep 30 – Oct 2: three-day online course
- 2024, Sep 30 – Oct 2: three-day online course
- 2023, Oct 11-13: three-day online course
- 2022, Oct 5-7: three-day online course
For an overview of all NHR@FAU courses, visit the course overview page.