gpt4 book ai didi

Delphi 通用类型 - 特异性?

转载 作者:行者123 更新时间:2023-12-03 18:19:41 27 4
gpt4 key购买 nike

我正在尝试在 delphi 下创建一个名为 TRange 的通用类。这个想法是,它可以是整数范围或单精度范围或 double 范围等...

TRange 对象包含一些 T 类型的变量(maxValue、minValue、idealValue 等)。 TRange 包含每个函数将它们转换为字符串的函数。然而,由于 Delphi 是一种强类型语言,我需要指定“如何”将不同的变量转换为字符串。

我可以使用 GetTypeName (TypeInfo (T)) 获取 T 类型的 typeName。一旦我知道哪种类型是 T,我想我可以做类似的事情:

if(className = 'single') then
result := formatFloat('0.0', self.AbsMin as Single)
else
result := intToStr(self.AbsMin as Integer)

但是,编译器告诉我“运算符不适用于此操作数类型”。

所以,我想我的问题是:

有没有办法赋予通用类特殊性???

最佳答案

编译器错误源自以下事实:您无法使用 as 运算符强制转换为基本类型,例如 SingleInteger。为此使用硬转换:Single(AbsMin)

Is there a way to give specificity to a generic Class???

为什么需要将值转换为字符串?这有点违背泛型类的想法,因为您现在又要为所有情况实现特殊行为。

如果你真的需要这个,你可以引入一个接口(interface)

IValueStringConverter <T> = interface
function ToString(Value : T) : String;
end;

您可以在 TRange 类的构造函数中提供转换器并将其存储在字段中:

constructor TRange <T>.Create(Converter : IValueStringConverter <T>);
begin
FConverter := Converter;
end;

现在只需使用类内的转换器即可进行转换:

Str := FConverter.ToString(AbsMin);

关于Delphi 通用类型 - 特异性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125779/

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