Another interesting hack: expand a static array into parameter arguments

Artur Skawina art.08.09 at gmail.com
Wed Apr 2 14:53:44 PDT 2014


On 04/02/14 21:46, Andrej Mitrovic wrote:
> auto Delay(alias arg, size_t idx)() { return arg[idx]; }
> 
> template expand(alias array, size_t idx = 0)
>     if (isStaticArray!(typeof(array)))
> {
>     alias Array = typeof(array);
> 
>     static if (idx + 1 < Array.length)
>         alias expand = TypeTuple!(Delay!(array, idx),
>                                   expand!(array, idx + 1));
>     else
>         alias expand = Delay!(array, idx);
> }


   template expand(alias A, alias M=Delay) {
      mixin(q{alias expand = TypeTuple!(}
             ~ iota(A.length).map!q{",M!(A,"[!a..$]~text(a)~")"}().join()
             ~ q{);});
   }

SCNR.

artur


More information about the Digitalmars-d mailing list