tl; dr: Как вы делаете совершенную пересылку в D?
Ссылка имеет отличное объяснение, но, например, допустим, у меня есть этот метод:1006 *
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
-ность метода, pure
-ity, nothrow
и т. Д. ... и это также ограничивает использование значений со значениями r.
И Iне знаете, как справиться с этими возможными случаями ... какие-либо идеи?