我正在試驗Delphi 10 Seattle並嘗試創建我的第一個通用容器類。我需要一個通用的Comparer將自定義比較器傳遞給Delphi中的通用創建過程
這裏一個簡單的Hash對象,我創建了幫助:
type
TsmHeap<T> = class
private
fList: TList<T>;
Comparer: TComparer<T>;
procedure GetChildren(ParentIndex: integer; var Child1, Child2: integer);
function GetParent(ChildIndex: integer): integer;
function GetCapacity: integer;
function GetCount: integer;
function MustSwap(iParent, iChild: integer): boolean;
procedure SetCapacity(const Value: integer);
public
constructor Create(aComparer: TComparer<T>); overload;
constructor Create(aComparer: TCOmparer<T>; aCapacity: integer); overload;
destructor Destroy; override;
//-- Methods & Functions
function Dequeue: T;
procedure Enqueue(Item: T);
function IsEmpty: boolean;
//-- Properties
property Count: integer read GetCount;
property Capacity: integer read GetCapacity write SetCapacity;
end;
我已經寫了這些方法的代碼並將其編譯自身沒有問題。但是,當我嘗試創建該類的整數版本時,我無法將其編譯。
有問題的代碼是:
iHeap := TsmHeap<integer>.Create(TComparer<integer>.Construct(
function(const Left, Right: integer): integer
begin
result := Sign(Left - Right);
end)
);
這給了「E2250目前的‘創建’無重載版本,可以用這些參數被稱爲」
我在做什麼錯?我如何創建比較器?
'Sign'沒有任何用處,而且很浪費。此外,減法可能很容易溢出。這是實現比較器的錯誤方法。 –