私はDelphi 10 Seattleを試していて、最初のGeneric Containerクラスを作成しようとしています。カスタムコンプレッサをDelphiのジェネリックCreateプロシージャに渡す
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;
私は、メソッドのコードを書いたのだが、何の問題もなく独自にコンパイルします。私は、私が作成したジェネリックはComparer
ここでは、単純なハッシュオブジェクトを支援する必要があります。しかし、クラスの整数バージョンを作成しようとするとコンパイルできません。
問題のコードは次のとおりです。
iHeap := TsmHeap<integer>.Create(TComparer<integer>.Construct(
function(const Left, Right: integer): integer
begin
result := Sign(Left - Right);
end)
);
これは私が間違って何をやっている「これらの引数で呼び出すことができる 『作成』のないオーバーロードされたバージョンではありませんE2250」
を与えますか? Comparerを作成するにはどうすればいいですか?
「署名」は目的を果たさず、無駄です。さらに、減算は非常に容易にオーバーフローする可能性があります。これは、比較者を実装するには間違った方法です。 –