Aliases
Hasan Aljudy
hasan.aljudy at gmail.com
Sun Oct 22 06:13:08 PDT 2006
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:
>
> union {
> long[2] nodes;
> struct {
> int left; // oops, forgot to change this. Now we've sliced the
> first value
> int right;
> }
> }
>
> (Alternatively, you could implement this in an even more verbose way,
> which doesn't support things like left++:
> int[2] nodes;
> int left() { return nodes[0]; }
> int left(int val) { return nodes[0] = val; }
> int right() { return nodes[1]; }
> int right(int val) { return nodes[1] = val; }
> )
>
> It could also be used for function forwarding, as Frank Benoit requested
> earlier ('Feat. RQ: delegation alias'):
>
> class Foo
> {
> void DoSomething() {...}
> }
>
> class FooHandle
> {
> Foo myFoo;
> alias myFoo.DoSomething DoSomething;
> }
>
>
> Maybe someone can explain why this restriction is necessary.
alias has to do with symbols in the symbol table.
At least that's the definition, IIRC.
Although I'm sure it can either be extended to include what you propose,
or a new keyword can be introduced for that purpose.
>
> Cheers,
>
> Reiner
More information about the Digitalmars-d
mailing list