6

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);
}

、、、、メソッドの-ness、-ity 、refなどを処理しないため、もちろん機能しません。また、r値で値を使用する方法も制限されます。inoutinoutconstpurenothrow

そして、これらの可能性のあるケースを処理する方法がわかりません...何かアイデアはありますか?

4

1 に答える 1

3

まだ完全ではありませんが、素朴なアプローチを改善できます。

auto ref bar(T...)(auto ref T args)
{
    writeln("foo() intercepted!");
    return foo(args);
}

唯一の問題はscope引数です。

于 2011-10-31T03:30:47.597 に答える