null and type safety
BCS
ao at pathlink.com
Thu Nov 6 11:52:56 PST 2008
Reply to Walter,
> Steven Schveighoffer wrote:
>
>> Couldn't one design a struct wrapper that implements this behavior?
>>
> If that cannot be done in D, then D needs some design improvements.
> Essentially, any type should be "wrappable" in a struct which can
> alter the behavior of the wrapped type.
>
> For example, you should also be able to create a ranged int that can
> only contain values from n to m:
>
> RangedInt!(N, M) i;
>
> Preserving this property of structs has driven many design choices in
> D, particularly with regards to how const fits into the type system.
>
Why not explicitly support this with bodied typedefs?
typedef int MyInt(int m, int M)
{
MyInt opAssign(int i) { assert(m <= i && i <= M); this = i; }
MyInt opAssign(int m_, int M_)(MyInt!(m_,M_) i) // <- that doesn't work
but...
{
static if(m > m_ && M_ > M) assert(m <= i && i <= M); // only assert
as needed
else static if(m > m_) assert(m <= i);
else static if(M < M_) assert(i <= M);
this = i;
}
// this is only to define the return type, the normal code for int is
still generated
MyInt!(m+m_, M+M_) opAdd(int m_, int M_)(MyInt!(m_,M_) i) = this;
}
More information about the Digitalmars-d
mailing list