我想寫一個接受匹配參數類型的泛型函數。
德爾福確實在簡單的參數的簡單情況下正確推斷類型參數。基於泛型參數類型的類型推斷(德爾福)
如:
type
TFoo = class
function Pair<T>(e1, e2: T): TList<T>;
end;
與aFoo.Pair(1, 2);
工作完全正常調用這個,但是當我改變參數簽名泛型類型
type
TFoo = class
function InsertInto<T>(aList: TList<T>; aVal: T): TList<T>;
end;
,並試圖把它
aFoo.InsertInto(TList<String>.Create, 'bar');
然後編譯器就會抱怨它:
E2010 Incompatible types: 'Generics.Collections.TList<uTest.TFoo.InsertInto.T>' and 'Generics.Collections.TList<System.String>'
有什麼辦法可以寫這個(或類似的)方法,以便客戶端不必指定類型參數?
aFoo.InsertInto<String>(TList<String>.Create, 'bar');
我認爲這個錯誤信息給你一個線索,即類型推斷不會在這裏完成工作。這顯然是對編譯器的推理系統不是在問: –
嘗試的頂部,使AVAL簡單的例子一個困難的問題:T第一個參數,也許這將使其更易於編譯器,但機會是非常非常差 –
替換「字符串「與‘strign’,享受E2010不兼容的類型:‘System.Generics.Collections.TList’和‘布爾’ –