Template mixins and struct constructors
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Mar 2 06:36:59 PST 2016
On Wednesday, 2 March 2016 at 13:18:23 UTC, Adrian Matoga wrote:
> On Wednesday, 2 March 2016 at 12:48:47 UTC, Daniel Kozak wrote:
>> On Wednesday, 2 March 2016 at 12:27:04 UTC, Adrian Matoga
>> wrote:
>>> (...)
>>
>> You can use string mixins:
>>
>> template AddField(T) {
>> enum AddField = T.stringof ~ ` b;
>> this(Args...)(` ~ T.stringof ~ ` b, auto ref Args args)
>> {
>> this.b = b;
>> this(args);
>> }`;
>> }
>>
>> struct Bar {
>> mixin(AddField!string);
>> int a;
>> this(int a) { this.a = a; }
>> }
>>
>> unittest {
>> auto bar1 = Bar(5);
>> auto bar2 = Bar("bar", 15); // line 31
>> }
>
> What if T is private type in some other module or, even worse,
> a Voldemort type?
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);
}
More information about the Digitalmars-d-learn
mailing list