本文介绍了在delphi中测试泛型的类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用某种方式在delphi中编写如下函数

 过程Foo< T; 
开始
如果T =字符串则
开始
//做点
结束;

如果T = Double然后
开始
//做其他事情
结束;
结尾;

即:我希望能够基于通用类型做不同的事情



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



我什至不确定是否可以在pascal中实现

解决方案

应当起作用:
结尾;

类过程TTest.Foo< T> ;;

开始,如果TypeInfo(T)= TypeInfo(string)然后
Writeln('string')
否则,如果TypeInfo(T)= TypeInfo(Double)然后
Writeln('Double')
else
Writeln(PTypeInfo(TypeInfo(T))^。Name);
结尾;

程序Main;
开始
TTest.Foo< string> ;;
TTest.Foo< Double> ;;
TTest.Foo< Single> ;;
结尾;


I want some way to write a function in delphi like the following

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

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

ie: I want to be able to do different things based on a generic type

I've tried using TypeInfo in System but this seems to be suited to objects rather than generic types.

I'm not even sure this is possible in pascal

解决方案

TypeInfo should work:

type
  TTest = class
    class procedure Foo<T>;
  end;

class procedure TTest.Foo<T>;
begin
  if TypeInfo(T) = TypeInfo(string) then
    Writeln('string')
  else if TypeInfo(T) = TypeInfo(Double) then
    Writeln('Double')
  else
    Writeln(PTypeInfo(TypeInfo(T))^.Name);
end;

procedure Main;
begin
  TTest.Foo<string>;
  TTest.Foo<Double>;
  TTest.Foo<Single>;
end;

这篇关于在delphi中测试泛型的类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-27 16:13