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