簡體   English   中英

Delphi泛型函數

[英]Delphi function generic

我想創建一個泛型函數。 我是通用類的新手。 我有3個不同類型的私人名單。 我想要一個公共通用方法來返回列表的1個項目。

我有下面的代碼。 (我很簡單)

TFilter = class
private
   FListFilter            : TObjectList<TFilterEntity>;
   FListFilterDate        : TObjectList<TFilterDate>;
   FListFilterRensParam   : TObjectList<TFilterRensParam>;
public
   function yGetFilter<T>(iIndice : integer) : T; 
....
function TFilter .yGetFilter<T>(iIndice : integer) : T; 
begin
    if T = TFilterEntity then
       result := T(FListFilter.Items[iIndice])
    else
       ....
end;

我知道該代碼不會運行,但是您能告訴我是否有可能執行該操作嗎?

只需介紹泛型參數T約束即可 它必須是一堂課。

從文檔中:

類型參數可能受零個或一個類類型的約束。 與接口類型約束一樣,此聲明意味着編譯器將要求任何作為參數傳遞給約束類型參數的具體類型都必須與約束類兼容。 類類型的兼容性遵循OOP類型兼容性的一般規則-在需要其后代類型的地方可以傳遞后代類型。

將聲明更改為:

function yGetFilter<T:class>(iIndice : integer) : T;

更新

在XE5和更早版本中,您似乎會遇到編譯器錯誤:

E2015運算符不適用於此操作數類型

在這一行:

if T = TFilterEntity then

在XE6及更高版本中,此錯誤已修復。

為了規避,請按照David在評論中所說的那樣做:

if TClass(T) = TFilterEntity then

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM