Aliases
Bill Baxter
wbaxter at gmail.com
Sun Oct 22 11:22:49 PDT 2006
rm wrote:
> Reiner Pope wrote:
>
>>What's the purpose of the restriction of alias in the specs -- 'Aliases
>>cannot be used for expressions'; it prevents some useful things like this:
>>
>> int[2] nodes;
>> alias nodes[0] left;
>> alias nodes[1] right;
>>
>>which currently has to be written in a much more hackish way:
>>
>> union {
>> int[2] nodes;
>> struct {
>> int left;
>> int right;
>> }
>> }
>>
>>This is less reliable because if you decide to change the datatype of
>>nodes, you could easily stuff up:
>
>
> you could do this:
>
> template KT(T)
> {
> union KT
> {
> T[2] nodes;
> struct
> {
> T left;
> T right;
> }
> }
> }
>
> alias KT!(int) K;
>
> roel
Or in this case he's not even after a template, so just
union {
alias int NodeID;
NoteID[2] nodes;
struct {
NodeID left;
NodeID right;
}
}
But, I see your point, Reiner. 'alias foo[1] bar' expresses the intent
of the programmer more clearly here than union, and doesn't have the
typesafety issues.
--bb
More information about the Digitalmars-d
mailing list