Delphi:确定泛型的实际类型?

2023-11-21

有什么方法可以确定作为参数传递给方法的变量的类型吗?考虑一下这个类:

TSomeClass = class
  procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;

与方法实现

procedure TSomeClass.AddToList<T, U>(Element: T; List: U);
begin
  if Element is TInt then
    List.AddElement(TInt.Create(XXX))
  else if Element is TString then
    List.AddElement(TString.Create(YYY));
end;

其中 TInt.Create() 和 TString.Create() 具有不同的参数集,但它们都继承自 TDataType。

现在,我知道了is-operator 不能这样使用,但是有没有合法的替代方案可以满足我在这里的要求?


无法使用is这里的运算符是一个已知问题,但有一个非常简单的解决方法。

  if TObject(Element) is TInt then
    List.AddElement(TInt.Create(XXX))

此外,由于泛型的类型是类的一部分并且在编译时已知,因此您最好重新构建代码。创建两个不同的泛型类,其中一个接受 TInt 作为其<T>参数,另一个接受 TString。将特定于类型的功能放入该级别的它们中,并让它们来自共享功能的共同祖先。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi:确定泛型的实际类型? 的相关文章

随机推荐