Compile-time function call with transformed parameters

realhet real_het at
Wed Oct 14 23:33:39 UTC 2020

Is there a way to make this in a nicer way without the string 

private auto generateVector(CT, alias fun, T...)(in T args){
   static if(anyVector!T){
     Vector!(CT, CommonVectorLength!T) res;
     static foreach(i; 0..res.length) res[i] = mixin("fun(",!(j => 
"args["~j.text~"].vectorAccess!i").join(','), ")");
     return res;
     return fun(args);

The mixin expands to:
fun(args[0].vectorAccess!i, ..., args[$-1].vectorAccess!i)

And vectorAccess is a function with a template int parameter (i).

private auto vectorAccess(int idx, T)(in T a){
   static if(isVector!T) return a[idx];
                    else return a;

I tried with staticMap, but that vectorAccess is a runtime thing. 
Other than that I have no idea. I'm 99% sure DLang has a nice 
thing for this, but can't find it yet.

Maybe it is possible to put a thing like this -> [ 
args[0].vectorAccess!i ] into an AliasSeq and then give that 
inside the fun(), but how can I generate effectively an array of 

Thank you!

More information about the Digitalmars-d-learn mailing list