gpt4 book ai didi

delphi - 如何将预先存在的函数分配给 TComparison

转载 作者:行者123 更新时间:2023-12-03 15:44:50 25 4
gpt4 key购买 nike

program Project55;    
{$APPTYPE CONSOLE}
uses
System.Generics.Defaults;

type
TestRec<T> = record
Compare: TComparison<T>;
CompareI: IComparer<T>;
end;

var
TRI: TestRec<Integer>;

begin
TRI.CompareI:= TComparer<Integer>.Default;
TRI.Compare:= TRI.CompareI.Compare; //E2035 Not enough actual parameters
TRI.Compare:= @TRI.CompareI.Compare; //E2035 Not enough actual parameters
end.

我知道我可以将函数体分配为匿名函数,但为什么我不能分配现有函数?

当然,以下方法有效,但这很愚蠢:

  TRI.Compare:= function(const L,R: integer): Integer
begin
Result:= TRI.CompareI.Compare(L,R);
end;
PS。我正在使用 Delphi XE7,但我怀疑版本是否重要。

最佳答案

知道IComparer<T>是一个接口(interface),只有一个方法,其签名与 TComparison<T> 相同并且匿名方法只是带有一种方法的接口(interface),您可以执行以下操作。

IComparer<Integer>(TRI.Compare) := TRI.CompareI;

我在 Spring4D 中使用这个技巧来避免在 TComparison<T> 周围创建包装对象。传递为 IComparer<T>因为它们是二进制兼容的。

关于delphi - 如何将预先存在的函数分配给 TComparison<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com