struct
не может наследовать другие struct
'ы. Но
для таких несчастных структур D предоставляет
другой мощный механизм для расширения их функциональности -
подтипы.
Структура может определить один из своих членов как
alias this
:
struct SafeInt {
private int theInt;
alias theInt this;
}
Любая функция или операция над SafeInt
, которая
не может быть применена к самому типу, будет переадресована
члену, объявленному как alias this
. Таким образом,
"снаружи" SafeInt
выглядит как обычный целочисленный
тип.
Это позволяет расширить другие типы новым функционалом,
не добавляя нагрузки по памяти или времени исполнения.
Компилятор делает всё для принятия правильного решения
при доступе к члену через alias this
.
alias this
так же работает и с классами.