struct
can't inherit from other struct
s. But
for those poor struct
s D provides another great
means to extend their functionality: subtyping.
A struct type can define one of its members as
alias this
:
struct SafeInt {
private int theInt;
alias theInt this;
}
Any function or operation on SafeInt
that can't
be handled by the type itself will be forwarded
to the alias this
ed member. From the outside
SafeInt
then looks like a normal integer.
This allows extending other types
with new functionality but with zero overhead
in terms of memory or runtime. The compiler
makes sure to do the right thing when
accessing the alias this
member.
alias this
work with classes too.