Delphi泛型类型-特异性?

Delphi泛型类型-特异性?,delphi,generics,integer,Delphi,Generics,Integer,我试图在delphi下创建一个名为TRange的泛型类。其思想是,它可以是一个整数范围,也可以是一个单精度范围,或双精度范围,等等 TRange对象包含一些T类型的变量(maxValue、minValue、idealValue等)。TRange包含一个函数,用于将它们转换为字符串。然而,由于Delphi是一种强类型语言,我需要指定“如何”将不同的变量转换成字符串 我可以使用GetTypeName(TypeInfo(T))获取T类型的typeName。一旦我知道哪种类型是T,我想我可以这样做: i

我试图在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
运算符强制转换为基本类型,例如
Single
Integer
。请使用硬模式:
Single(AbsMin)

有没有一种方法可以给泛型类赋予特殊性

为什么需要将值转换为字符串?这有点违背了泛型类的概念,因为现在您又回到了为所有情况实现特殊行为的阶段

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

IValueStringConverter <T> = interface
  function ToString(Value : T) : String;
end;
现在只需使用类内的转换器进行转换:

Str := FConverter.ToString(AbsMin);

当然,AbsMin属于类型T;)<代码>整数和
单个
标记在IMHO中不是很有用。
Str := FConverter.ToString(AbsMin);