tl; dr:你如何在 D 中进行完美转发?
该链接有一个很好的解释,但例如,假设我有这个方法:
void foo(T)(in int a, out int b, ref int c, scope int delegate(ref const(T)) d)
const nothrow
{
}
如何创建另一个方法,bar()
可以代替foo()
调用,随后foo()
“完美”调用(即在调用站点不引入编译/范围/等问题)?
天真的方法
auto bar(T...)(T args)
{
writeln("foo() intercepted!");
return foo(args);
}
当然不起作用,因为它不处理ref
, in
, out
, inout
,const
方法的 -ness , pure
-ity,nothrow
等......并且它还限制了值如何与 r 值一起使用。
而且我不知道如何处理这些可能的情况......有什么想法吗?