【发布时间】:2018-03-21 15:01:06
【问题描述】:
Delphi TList.Sort() 方法需要一个 function (Item1, Item2: Pointer): Integer; 类型的回调函数参数来比较列表项。
我想摆脱回调函数中的类型转换,并想定义一个这样的回调函数:
function MyTypeListSortCompare( Item1, Item2 : tMyType ) : integer;
begin
result := WideCompareStr(Item1.Name, Item2.Name);
end;
...
MyList.Sort(tListSortCompare(MyTypeListSortCompare));
...
但不幸的是,这会触发“无效类型转换”编译器错误。
是否有可能在 Delphi(2006) 中正确地对函数指针进行类型转换?
【问题讨论】:
-
没有。这是不可能的。传递给该回调的类型转换项(回调必须与其声明匹配)。
-
当然不是。但是想要这样做是没有意义的。您编写了一次排序过程代码,并且永远不会自己调用它。为什么要通过添加函数的骇人听闻的类型转换来使其更难以阅读和维护?
-
我以Sort回调为例,我的问题不限于排序。
标签: function delphi casting delphi-2006