Delphi泛型类型-特定性



我正试图在delphi下创建一个名为TRange的泛型类。这个想法是,它可以是整数范围,也可以是单、双等范围

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)

有没有一种方法可以赋予泛型类特定性???

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

如果你真的需要这个,尽管你可以引入一个接口

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);

相关内容

  • 没有找到相关文章

最新更新