Delphi通用类型-特异性?

问题描述

| 我试图在delphi下创建一个称为TRange的泛型类。这个想法是它可以是整数范围或单精度或双精度等范围... TRange对象包含一些类型为T的变量(maxValue,minValue,idealValue等)。 TRange包含每个函数将其转换为字符串的功能。但是,由于Delphi是一种强类型语言,因此我需要指定\“ How-To \”将不同的变量转换为字符串。 我可以使用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
运算符将其转换为诸如as2ѭ或
Integer
之类的原始类型。为此使用硬石膏:
Single(AbsMin)
。   有没有办法为泛型类赋予特异性??? 为什么需要将值转换为字符串?这有点与泛型类的想法背道而驰,因为您现在将返回在所有情况下实现特殊行为的方式。 如果确实需要,可以介绍一个界面
IValueStringConverter <T> = interface
  function ToString(Value : T) : String;
end;
您可以只在in6ѭ类的构造函数中提供转换器,并将其存储在字段中:
constructor TRange <T>.Create(Converter : IValueStringConverter <T>);
begin
FConverter := Converter;
end;
现在,只需在类中使用转换器即可进行转换:
Str := FConverter.ToString(AbsMin);
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...