Simpler, schneller, stärker: Typen in Modernem C++
21. Januar 2021, 14 Uhr (online)
C++ hat Datentypen wie `int` mit deren impliziter Konvertierung und Vielzahl an Operatoren von C übernommen, was teilweise zu fehlerhaften Berechnungen führt oder überraschende Effekte hat. Allerdings bietet C++ mit der "Zero-Overhead Abstraction" die Möglichkeit, effiziente Datentypen selbst zu gestalten.
Dieser Vortrag stellt das "Whole Value Pattern" und seine effektive Anwendung in modernem C++ vor. Er zeigt, wie man aussagekräftige Datentypen für die Anwendungsdomäne ("Strong Typing") einfach umsetzen kann, die vergleichbar effizienten Code wie die eingebauten Datentypen erlauben, ohne deren Risiken zu besitzen. Damit Code mit Domänentypen lesbar bleibt, ist es wichtig, sinnvolle Operatoren zu unterstützen. Für Vergleichsoperatoren bietet C++20 deutlich weniger Implementierungsaufwand als die Vorgängerversionen.
Aber wie erhält man eine sinnvolle Auswahl an anderen Operatoren, ohne selbst immer wieder eigene Operatorfunktionen definieren zu müssen?
C++17 "Structured Bindings" bieten hier eine Möglichkeit, per Mix-in-Klassen passende Operatorenfunktionen bereit zu stellen, ohne diese immer wieder kodieren zu müssen.
Lernziele
Vorteile von Domänentypen (Strong Types) gegenüber der Nutzung der eingebauten Datentypen kennenlernen
Übersicht, wie diese Domänentypen automatisch mit den Vergleichsoperatoren funktionieren, durch die C++20 Mechanismen des 3-Wege Vergleichsoperators und der automatischen Generierung von Vergleichsoperatoren
Für weitere Operatoren wird vorgestellt, wie diese mittels Mix-in-Klassen generisch und bedarfsgerecht bereit gestellt werden können und wie das PSsst-Framework dazu genutzt werden kann