2
如果您定義接受委託的函數,那麼當您調用該函數時,D可以鍵入推斷委託參數。所以,如果我寫的帶有簽名的函數:使用未知數量的已知類型參數輸入推斷委託參數
void foo(void delegate(int,string) dlg)
我可以用叫它:
foo((a,b){});
和d將推斷出a
是int
和b
是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){});
和d將推斷出a
到g
都是string
秒。
請注意,我需要的是而不是 varidaic函數。 dlg
本身不接受任何數量的參數,它是foo
接受具有任意數量參數的委託。
在D中可以這樣做嗎?
編輯:
事實上,它會更好,如果我可以定義默認參數,所以我可以寫
foo((a,b,int c,d){});
和a
,b
和d
將字符串而c
將int
。
在技術上,它不是一樣的,因爲在這種情況下沒有類型推斷髮生。別名委託成爲模板,並在通常的每次使用的基礎上實例化。據我所知,Idan詢問的內容稍有不同。 – 2013-03-20 09:15:51
其實我可以使用這個,但由於某種原因,當我這樣做'isCallable!dlg'返回false,所以我不能使用'ParameterIdentifierTuple!dlg'和'ParameterTypeTuple!dlg'獲取委託的參數類型和名稱。有沒有辦法解決這個問題,還是我必須自己解析'dlg.stringof'來獲取這些信息? – 2013-03-22 01:24:45
好的,問題是'dlg'是一個模板,而不是代表。如果我使用'dlg(字符串,字符串,字符串,字符串)'我可以得到它的參數特徵數據。我怎樣才能知道一個模板有多少個模板參數? – 2013-03-22 02:24:50