multiple `alias this` suggestion

Carl Sturtivant via Digitalmars-d digitalmars-d at puremagic.com
Sat Apr 29 15:46:56 PDT 2017


On Thursday, 27 April 2017 at 05:41:43 UTC, Daniel N wrote:
> On Wednesday, 26 April 2017 at 18:34:48 UTC, Carl Sturtivant 
> wrote:
>> On Wednesday, 26 April 2017 at 15:00:30 UTC, Steven 
>> Schveighoffer wrote:
>>> I think you can appreciate that this doesn't scale. Imagine a 
>>> case which has 2 or 3 optional alias this items.
>>>
>>> -Steve
>>
>> Agreed, not manually, as it is exponential in the number of 
>> conditions.
>
> Image using frameworks which conveniently allow adding features 
> to a struct...
>
> struct Beholder
> {
>   mixin Entity!Movable;
>   mixin Render!"Beholder.png";
> }
>
> ... then you couldn't even solve it manually without rewriting 
> the framework.

Here's a way to use single hierarchical AliasThis as per this 
thread without editing vendor code. No special mechanism for name 
collisions is needed.

// contain arbitrary names from vendors, & do some renaming if 
desired
struct EntityWrapper(T)
{
     //one hierarchical AliasThis in here (or none)
   mixin Entity!T;
}
struct RenderWrapper(string s)
{
     //one hierarchical AliasThis in here (or none)
   mixin Render!s;
   alias t2 = t; //e.g.
}

struct Beholder
{
   EntityWrapper!Movable entity;
   RenderWrapper!"Beholder.png" render;
     //one hierarchical AliasThis in here
   alias entity, render this; //if render.t is shadowed, it gets 
out as t2
}




More information about the Digitalmars-d mailing list