デリゲートを受け入れる関数を定義すると、D はその関数を呼び出すときにデリゲート引数を型推論できます。したがって、署名付きの関数を作成すると、次のようになります。
void foo(void delegate(int,string) dlg)
次を使用して呼び出すことができます:
foo((a,b){});
a
D はisint
とb
isを推測しstring
ます。
しかし、デリゲートが持つ引数の数が事前にわからない場合はどうすればよいでしょうか? 私が書くなら
void foo(T...)(void delegate(T) dlg)
私は呼び出すことができます:
foo((int a,string b,char c,boolean d){});
ただし、引数ごとに型を指定する必要がありました。
ここで、任意の数の引数 (すべて同じ型) をfoo
持つデリゲートを受け入れたいと考えています。だから私は呼び出すことができます:
foo((a,b,c,d,e,f,g){});
a
D はtog
がすべてstring
sであると推論します。
私が必要としているのは可変長関数ではないことに注意してください。dlg
それ自体は任意の数の引数を受け入れません。任意の数の引数foo
を持つデリゲートを受け入れます。
Dでこれを行うことは可能ですか?
EDIT:
実際には、デフォルトの引数を定義できれば良いので、書くことができます
foo((a,b,int c,d){});
とa
、は文字列になりますが、b
はになります。d
c
int