Subtypen in D

D bietet Vererbung für Klassen an, nicht aber für structs. Zur Erweiterung der Funktionalität von structs gibt es allerdings ein weiteres großartiges Mittel: Die Verwendung von Subtypen.

Einer der Member eines structs kann als alias this definiert werden:

struct SafeInt {
    private int theInt;
    alias theInt this;
}

Jede Funktion oder Operation an SafeInts, die nicht vom Typ selbst behandelt werden kann, wird an den alias this-Member weitergeleitet. Von außen betrachtet ist SafeInt also ein normaler Integer.

Dies erlaubt die Erweiterung anderer Typen mit neuer Funktionalität, aber ohne Mehraufwand (engl.: zero overhead) in Bezug auf Speicher oder Laufzeit.

alias this funktioniert auch mit Klassen!

rdmd playground.d