D 如何将方法转化为函数?

D 如何将方法转化为函数?,d,D,我已经编写了一个小助手函数来模拟C++的模板扩展语法 静态模板解包(别名f){ pragma(内联) 自动进入(别名目标,参数…)(参考参数参数){ 进口标准conv; enum s=`target(`iota(Args.length).map!(i=>text(`f(Args[`,i,`])`)).join(“,”)~`; 回流混合器; } 自动进入(别名目标,参数…)(参数参数){ 返回到!(目标)(args); } } 它可以这样使用 auto intTuple=unpack!(i=>i

我已经编写了一个小助手函数来模拟C++的模板扩展语法

静态模板解包(别名f){
pragma(内联)
自动进入(别名目标,参数…)(参考参数参数){
进口标准conv;
enum s=`target(`iota(Args.length).map!(i=>text(`f(Args[`,i,`])`)).join(“,”)~`;
回流混合器;
}
自动进入(别名目标,参数…)(参数参数){
返回到!(目标)(args);
}
}
它可以这样使用

auto intTuple=unpack!(i=>i*10)。进入!(元组)(1,2,3);
//元组!(整数,整数,整数)(10,20,30)
这和预期的一样,但是如果我需要调用一个返回ref的方法,我会遇到一些问题

void test1(T)(参考T){
writeln(t);
}
阵列!int ai=[1,2,3,4];
打开(r=>r.front())。进入!(测试1)(ai[]);
这应该大致转化为
test1(ai[].front())。但是它没有编译,因为lambda语法似乎无法处理ref返回值

所以这个修复我需要创建一个helper函数

ref auto cffront(T)(ref T){
返回t.front();
}
打开(前面)。进入!(测试1)(ai[]);
有什么表达方式吗

ref auto cffront(T)(ref T){
返回t.front();
}
作为lambda函数


或者我可以在UFCS的帮助下将
.front()
方法变成一个独立的函数吗?

辅助函数可能是您能做的最好的。。。