delphi – 如何将指针转换为泛型参数类型?
发布时间:2020-12-15 04:14:43 所属栏目:大数据 来源:网络整理
导读:这是我的第一个问题,很高兴找到这个网站. 我的问题涉及Delphi 2009中的新Generics功能.基本上我试图为现有的哈希映射实现编写一个通用的包装类.现有的实现存储(String,Pointer)对,所以在包装类中我必须在泛型参数类型T和指针类型之间进行转换,反之亦然. type
这是我的第一个问题,很高兴找到这个网站.
我的问题涉及Delphi 2009中的新Generics功能.基本上我试图为现有的哈希映射实现编写一个通用的包装类.现有的实现存储(String,Pointer)对,所以在包装类中我必须在泛型参数类型T和指针类型之间进行转换,反之亦然. type THashMap <T : class> = class private FHashList : THashList; ... end; 我想到了这样的演员(价值:T) Value := (TObject (Ptr)) as T 但这不起作用.编译器告诉我’运算符不适用于此操作数类型’. 有人有一些提示吗?非常感谢提前. 解决方法
您需要获取泛型类型参数类型的位置地址,然后将此地址类型转换为指向所需类型的指针,然后取消引用此指针并将其分配到结果位置.例如:
PObject(@Value)^ := Ptr; 你不能仅仅对类型为T的值进行类型转换,其中T不受约束,是因为编译器不知道T的大小;通常,非数字类型转换只能将值转换为大小相同的类型. 遗憾的是,编译器不够聪明,无法确定类类型约束意味着T保证与指针大小相同. 此外,当前的Delphi 2009泛型存在一个问题,即创建指向类型参数类型的指针.编译器不支持通用指针,但编译器允许在类中使用此语法: type C<T> = class type PT = ^T; // UNSUPPORTED! end; 这可能适用于某些情况 – 并且可能对您的特定问题有所帮助 – 但它只是偶然起作用而且通常不受支持.使用风险由您自己承担. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |