Menu

Подтипы

struct не может наследовать другие struct'ы. Но для таких несчастных структур D предоставляет другой мощный механизм для расширения их функциональности - подтипы.

Структура может определить один из своих членов как alias this:

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

Любая функция или операция над SafeInt, которая не может быть применена к самому типу, будет переадресована члену, объявленному как alias this. Таким образом, "снаружи" SafeInt выглядит как обычный целочисленный тип.

Это позволяет расширить другие типы новым функционалом, не добавляя нагрузки по памяти или времени исполнения. Компилятор делает всё для принятия правильного решения при доступе к члену через alias this.

alias this так же работает и с классами.

rdmd playground.d