作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要某种方法在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/
我是一名优秀的程序员,十分优秀!