C++ Core Guidelines: Concepts mit Traits und Tag Dispatching

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 und requires !C sollen vermieden werden. Stattdessen empfiehlt die Richtlinie ein allgemeines Template und eine gezielt eingeschränkte Variante. Concepts sollten zudem anhand von Nutzungsmustern definiert werden, statt nur einzelne Syntaxmerkmale aneinanderzureihen.

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.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein