Template mixins and struct constructors
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Mar 2 08:01:50 PST 2016
On Wednesday, 2 March 2016 at 14:50:15 UTC, Adrian Matoga wrote:
> On Wednesday, 2 March 2016 at 14:36:59 UTC, Daniel Kozak wrote:
>> OK maybe this one:
>>
>> template AddField(T) {
>> T b;
>> this(Args...)(T b, auto ref Args args)
>> {
>> this.b = b;
>> this(args);
>> }
>> this(int a) {
>> this.a = a;
>> }
>> }
>>
>> struct Bar {
>> int a;
>> mixin AddField!(string);
>> }
>>
>> unittest {
>> auto bar1 = Bar(5);
>> auto bar2 = Bar("bar", 15);
>> }
>
> Then it's limited to structs in which only "int a" is to be
> initialized. Not very useful and the templated ctor is not
> needed now.
>
> struct Baz {
> mixin AddField!string; // fail, no "int a" in Baz.
> ulong d;
> double x;
> string foo;
> }
OK then:
mixin template AddField(T) {
T b;
auto ref constructor(Args...)(T b, auto ref Args args)
{
typeof(this) r;
r.b = b;
r.__ctor(args);
return r;
}
}
struct Bar {
mixin AddField!string;
int a;
this(int a) { this.a = a; }
alias __ctor = constructor;
}
unittest {
import std.stdio;
auto bar1 = Bar(5);
auto bar2 = Bar("bar", 15);
writeln(bar1);
writeln(bar2);
}
More information about the Digitalmars-d-learn
mailing list