是否有任何有效的方法来为 delphi 泛型添加特定于类型的代码?例如这样的:
function TGT<T>.GetSize(a: T): integer;
begin
{$IF TypeInfo(T)=TypeInfo(String)}
result := Length(A);
{$ELSE}
result := SizeOf(A);
{$IFEND}
end;
function TGT<T>.Compare(a,b: T): integer;
begin
{$IF TypeInfo(T)=TypeInfo(String)}
result := AnsiCompareText(a,b);
{$ELSE}
result := a-b;
{$IFEND}
end;
所以我需要根据类型以不同的方式实现代码的某些部分。例如,如果我实现排序例程,我想使用整数/双精度/等类型的值的直接比较(它比调用像 delphi 的标准通用容器这样的接口方法更有效)和函数 AnsiCompareText 用于字符串类型。
有一些示例如何执行此操作,但所有示例都基于这样的检查:
if TypeInfo(T)=TypeInfo(String) then xxx else if TypeInfo(T)=TypeInfo(Integer) then xxx
这里的问题是 Delphi 只会在运行时检查它,这(再次)不是那么有效。我想让编译器在编译时进行所有检查,并且只使用特定于所选类型的代码。