【发布时间】:2011-10-31 00:15:51
【问题描述】:
tl;dr:你在 D 中的 perfect forwarding 怎么样?
该链接有很好的解释,但例如,假设我有这个方法:
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、@987654333 @ 等...它还限制了值如何与 r 值一起使用。
而且我不知道如何处理这些可能的情况......有什么想法吗?
【问题讨论】:
标签: d perfect-forwarding