Wow! That's so very cool! We can make it even nicer with

template Unroll(alias CODE, alias N, alias SEP="")
{
    enum t = replace(CODE, "%", "%1$d");
    enum Unroll = iota(N).map!(i => format(t, i)).join(SEP);
}

And use % as the placeholder instead of the ugly %1$d:

mixin(Unroll!("v1[%]*v2[%]", 3, "+"));

It actually gets quite readable now.

On Friday, 31 May 2013 at 17:30:13 UTC, Peter Alexander wrote:
Remember that in D, most side-effect free functions can be run at compile time. No need for recursive template trickery:

mixin(iota(3).map!(i => format("v[%1$d]+=rhs.v[%1$d];", i)).join());

Reply via email to