delphi - 在delphi中测试泛型的类型

标签 delphi generics pascal delphi-xe6

我想要某种方法在delphi中编写如下所示的函数

procedure Foo<T>;
begin
    if T = String then
    begin
        //Do something
    end;

    if T = Double then
    begin
        //Do something else
    end;
end;

即:我希望能够根据泛型类型做不同的事情

我尝试过在System中使用TypeInfo,但这似乎适合对象而不是泛型类型。

我什至不确定这在帕斯卡中是否可行

最佳答案

从 XE7 开始您可以使用 GetTypeKind找到 type kind :

case GetTypeKind(T) of
tkUString:
  ....
tkFloat:
  ....
....
end;

当然,tkFloat 标识所有浮点类型,因此您也可以测试 SizeOf(T) = SizeOf(double)

旧版本的 Delphi 没有 GetTypeKind 内在函数,您必须使用 PTypeInfo(TypeInfo(T)).Kind 代替。 GetTypeKind 的优点是编译器能够评估它并优化掉可以证明不被选择的分支。

所有这些都违背了泛型的目的,人们想知道您的问题是否有更好的解决方案。

关于delphi - 在delphi中测试泛型的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042997/

相关文章:

delphi - 面向 C++ 程序员的 Pascal/Delphi 教程

delphi 通过 wm_copydata 将运行参数传递给其他实例在 Delphi XE2 中给出错误结果

java - 参数化类,如何引用作为参数化类型传递的参数化类型

Java 泛型 : Infering the type from another method?

c# - 为什么以下不编译? (涉及到c#中的泛型和继承)

string - 什么是 Pascal 风格的字符串?

delphi - 在 Windows 7 X64 中,状态栏无法正确显示从第 11 位开始的面板文本

delphi - Delphi 64位平台上的汇编函数

delphi - 在 DT/RT 创建后如何在自定义组件上绘制额外的东西?

algorithm - 对包含 7 个整数的数组进行排序的最快方法是什么?