Done deal: import std.traits;
string FieldInit(T, int len, string fun)() { string result; auto fields = [__traits(allMembers, T)]; result ~= "this("; foreach (y, x; (RepresentationTypeTuple!T)[0..len]) { result ~= x.stringof ~ " " ~ fields[y] ~ ", "; } result = result[0.. $-2] ~ ") { "; foreach (x; 0 .. len) { result ~= "this." ~ fields[x] ~ " = " ~ fields[x] ~ "; "; } result ~= fun ~ "();"; result ~= "}"; return result; } struct Foo { int a; int b; int c; int d; mixin( FieldInit!(typeof(this), 4, "_this") ); int sum; int average; void _this() { sum = a + b + c + d; average = (a + b + c + d) / 4; } } void main() { auto foo = Foo(1, 2, 3, 4); assert(foo.sum == 10); assert(foo.average == 2); } Mostly.. Of course it doesn't work too good if the fields are placed below some functions.