d应扩展__traits(parameters)的使用范围
原文
应允许__traits(parameters)出现在函数的任何部分,而不仅仅是body和in和out合约中.
应允许如下:
typeof(__traits(parameters))[0] f(Ts...)(Ts args) { ... }
void f(Ts...)(Ts args)
if (__traits(parameters).length > 1)
{ ... }
嵌套函数有歧义:
void foo(T1...)(T1 args1)
{
typeof(__traits(parameters))[0] bar(T2...)(T2 args2)
{
// ...
}
}
bar的返回值是否依赖foo或bar的参数?目前,它引用foo的参数.
问题不大,返回类型同样模棱两可.
void f(T)()
{
T g(T)() { return T.init; }
}
g函数返回的T值,即f或g的类型参数(当然,它是g的).__traits(parameters)同样.此外,如果想要外部函数参数,可以给它们起别名.
void foo(T1...)(T1 args1)
{
alias fooParams = typeof(__traits(parameters));
fooParams[0] bar(T2...)(T2 args2)
{
// ...
}
}
浙公网安备 33010602011771号