On Wednesday, 31 May 2017 at 19:22:18 UTC, Stefan Koch wrote:
You could also use string mixins. Which will be more efficient then recursion.
I try to avoid string mixins unless I can't help it. Nevertheless, I made an effort to try to get it to work and below seems to be working. I still have to use some recursion to generate the string.
The downside is that this version can't be @nogc, correct? auto ref opIndex(Slices...)(Slices slices) if (Slices.length == Types.length) { template GetParensi(size_t i) { const char[] GetParensi = "this.underlying[" ~ i.stringof ~ "][slices[" ~ i.stringof ~ "]]"; } template GenParens(T...) { static if (T.length > 0) { static if (T.length == 1) const char[] GenParens = GetParensi!(T.length - 1); else static if (T.length > 1) const char[] GenParens = GenParens!(T[0 .. $ - 1]) ~ ", " ~ GetParensi!(T.length - 1); } } const char[] GenResult = "foo!(Names)(" ~ GenParens!Slices ~ ")"; return mixin(GenResult); }