gpt4 book ai didi

delphi - 如何使用泛型来替代一堆处理不同类型的重载方法?

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

我有一堆重载方法,它们都获取某种类型的数组作为参数,并从该数组返回一个随机值:

function GetRandomValueFromArray(Arr: array of String): String; overload;
begin
Result := Arr[Low(Arr) + Random(High(Arr) + 1)];
end;

function GetRandomValueFromArray(Arr: array of Integer): Integer; overload;
begin
Result := Arr[Low(Arr) + Random(High(Arr) + 1)];
end;

等等

如何使用泛型为任何类型的数组创建单一方法?像这样的东西(不能在 Delphi XE7 中编译):

function GetRandomValueFromArray(Arr: TArray<T>): <T>;

感谢任何意见,因为我阅读了大多数有关泛型的问题,但我仍然不清楚这是否可能?

最佳答案

要使用泛型函数,您必须将其转换为类的方法(以我的拙见,这是奇怪的限制)。请注意,class 函数不需要创建 TDummy

的实例
TDummy = class
class function GetRandomValueFromArray<T>(const Arr: TArray<T>): T;
end;

class function TDummy.GetRandomValueFromArray<T>(const Arr: TArray<T>): T;
begin
Result := Arr[Low(Arr) + Random(High(Arr) + 1)];
end;

intValue := TDummy.GetRandomValueFromArray<Integer>([1,3,5]);

关于delphi - 如何使用泛型来替代一堆处理不同类型的重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423105/

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