Die C++ Core Guidelines bei Heise Developer behandeln am 29. Oktober 2018 drei Regeln für Concepts. Im Mittelpunkt stehen Traits und Tag Dispatching, mit denen sich Konzepte mit gleicher Syntax, aber unterschiedlicher Semantik sauber voneinander trennen lassen.
Die Regel T.24 empfiehlt Tag-Klassen oder Traits, wenn zwei Concepts dieselbe Syntax verlangen, aber verschiedene Bedeutungen haben. Als Beispiel dient die Unterscheidung zwischen Random-Access- und Contiguous-Iteratoren. Ein Trait kann dabei eine zusätzliche Eigenschaft beschreiben, ohne die bereits vorhandene Anforderung neu zu definieren.
Tag Dispatching entscheidet zur Compilezeit
Tag Dispatching wählt eine passende Funktionsimplementierung anhand der Eigenschaften eines Typs. Die Entscheidung fällt zur Compilezeit. Heise Developer erläutert das Verfahren am Beispiel von std::advance: Ein Random-Access-Iterator kann direkt um eine Distanz verschoben werden, während bidirektionale und reine Input-Iteratoren andere Schritte benötigen.
Die beiden weiteren Regeln T.25 und T.26 betreffen den Aufbau der Einschränkungen. Komplementäre Constraints mit requires C
Der Beitrag setzt die Serie zu den C++ Core Guidelines fort. Zuvor wurden bereits Type Erasure und Templates behandelt. Für Entwicklerteams ist der Ansatz vor allem bei generischen Bibliotheken und performancekritischen Systemen interessant, weil die Auswahl der Implementierung ohne Laufzeitprüfung erfolgen kann.

