xxxxxxxxxx
import std.stdio;
mixin template BuildPattern(T)
{
static auto build()
{
static if (is(T == struct))
{
T t;
}
else
{
auto t = new T;
}
struct hidden
{
T value;
hidden opDispatch(string name, T)(T val)
{
mixin("value." ~ name ~ " = val;");
return this;
}
alias value this;
}
return hidden(t);
}
}
struct Foo
{
int a;
int b;
int c;
mixin BuildPattern!Foo;
}
void main()
{
auto foo = Foo.build
.a(100)
.b(200)
.c(300)
.value;
writeln(foo.a);
writeln(foo.b);
writeln(foo.c);
}