On Friday, 6 May 2022 at 00:41:18 UTC, zjh wrote:
Hello everyone,I have following function:
```d
import core.stdc.stdio;
void f(int i,int j){
    printf("%i,%i",i,j);
}
```
I want to forward `int[N]` to `(int i,int j)` etc. How can I write a forwarding function?
```d
void ff(alias g,int...I)(int[2]k){
    g(k[I]);
}//How to unpack template variable parameters?

void f(int[2]k){
    ff!(f,0,1)(k);//how to forward?
}

```

main function:
```d
extern(C):void main()
{
    int[2] a=[2,4];
    f(a);//calling like this
}
```

Try this:

```d
import core.stdc.stdio;

void f(int i,int j){
    printf("%i,%i",i,j);
}


import std.range :  iota;
import std.traits :  isStaticArray;
import std.meta :  AliasSeq;


template expand(alias arr)
if(isStaticArray!(typeof(arr))){
    auto get(size_t I)(){
        return arr[I];
    }

    alias Result = AliasSeq!();

    static foreach(I; iota(0, arr.length))
        Result = AliasSeq!(Result, get!I);

        alias expand = Result;
}


extern(C):void main(){
    int[2] a=[2,4];
    f(expand!a);
}
```

Reply via email to