`Alias this` to a mixed in property
    Bastiaan Veelo 
    Bastiaan at Veelo.net
       
    Wed Jan 24 14:35:08 UTC 2018
    
    
  
On Wednesday, 24 January 2018 at 14:21:42 UTC, ag0aep6g wrote:
> The spec says that you cannot make an overload set just by 
> mixing in multiple functions/methods with the same name. 
> Instead, you have to do it like this:
>
> ----
> mixin getter g;
> mixin setter!int s;
>
> alias p = g.p;
> alias p = s.p;
> ----
>
> https://dlang.org/spec/template-mixin.html#mixin_scope
Thanks a lot! I didn't know you could do overloads by way of 
multiple aliases with the same name.
I meant to use this for mixing in multiple instantiations 
generated from a static foreach over an AliasSeq of types, but 
generating unique identifiers poses an extra challenge.
I may go for string mixin's instead, which I just discovered do 
work:
```
import std.stdio;
enum getter = `
     @property int p()
     {
         writeln(__LINE__, " mixin getter");
         return 3;
     }
`;
string setter(string T) pure
{ return `
     @property int p(` ~ T ~ ` arg)
     {
         writeln(__LINE__, " mixin setter ` ~ T ~ `" ,  arg);
         return 4;
     }
`;
}
struct S
{
     mixin(getter);
     mixin(setter("int"));
     alias p this;
}
void main(string[] args)
{
     S s;
     s = 7;
     int i = s;
}
```
    
    
More information about the Digitalmars-d-learn
mailing list