<div dir="ltr"><div>I'm trying to define a boilerplate mixin for class constructor to generate code such as:</div><div>this(T1 a1, T2 a2){this.a1=a1; this.a2=a2;}</div><div><br></div><div>The following works, but fails if one field is from a superclass, with an error such as:</div><div>template instance GenThis!(b, a) GenThis!(b, a) is nested in both B and A.<br></div><div><br></div><div>Any suggestion?</div><div><br></div><div>----------</div><div>template GenThis(fields...){</div><div>  import std.typecons;<br></div><div>  import std.typetuple;</div><div>  import std.conv;</div><div>  private static string fun(){</div><div>  Â  string a="this(";</div><div>  Â  string b;</div><div>  Â  foreach(i;Iota!(fields.length)) {<br></div><div>  Â  Â  alias field=fields[i];</div><div>  Â  Â  auto name=Stringof!field;</div><div>  Â  Â  alias T=typeof(field);</div><div>  Â  Â  if(i>0) a~=", ";</div><div>  Â  Â  a~=T.stringof~" "~name;</div><div>  Â  Â  b~="this."~name~"="~name~"; ";</div><div>  Â  }</div><div>  Â  a~=`){`~b~`}`;</div><div>  Â  return a;</div><div>  }</div><div>  enum GenThis=fun();</div><div>}</div><div><br></div><div>unittest{</div><div>  class A{</div><div>  Â  int foo;</div><div>  Â  string bar;</div><div>  Â  mixin(GenThis!(bar, foo));</div><div>  }</div><div>  auto a=new A("abc",2);</div><div>  assert(a.foo==2 && a.bar=="abc");</div><div>}</div><div><br></div></div>