Delphi:确定通用的实际类型?
发布时间:2020-12-15 04:10:37 所属栏目:大数据 来源:网络整理
导读:有没有办法确定作为方法参数传递的变量的类型?考虑班级: TSomeClass = class procedure AddToListT: TDataType; U: TListClassT(Element: T; List: U);end; 与方法实现 procedure TSomeClass.AddToListT,U(Element: T; List: U);begin if Element is TInt
有没有办法确定作为方法参数传递的变量的类型?考虑班级:
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.在特定级别将特定于类型的功能放入其中,并让它们从共同的祖先下降以获得共享功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |