通用记录的Delphi TypeInfo
我试图在RTTI中使用泛型记录,但在类型信息方面遇到了问题。有人知道为什么下面的代码不能用Delphi2010编译吗通用记录的Delphi TypeInfo,delphi,generics,delphi-2010,rtti,typeinfo,Delphi,Generics,Delphi 2010,Rtti,Typeinfo,我试图在RTTI中使用泛型记录,但在类型信息方面遇到了问题。有人知道为什么下面的代码不能用Delphi2010编译吗 program GenericTypeInfo; {$APPTYPE CONSOLE} uses TypInfo, SysUtils; type TMyRec<T> = record public Value: T; end; TMyInt = TMyRec<Integer>; TMyString = TMyR
program GenericTypeInfo;
{$APPTYPE CONSOLE}
uses
TypInfo,
SysUtils;
type
TMyRec<T> = record
public
Value: T;
end;
TMyInt = TMyRec<Integer>;
TMyString = TMyRec<String>;
begin
try
Writeln(GetTypeName(TypeInfo(TMyRec<Integer>))); <--- This works fine
Writeln(GetTypeName(TypeInfo(TMyRec<String>))); <--- so does this
Writeln(GetTypeName(TypeInfo(TMyInt))); <--- BUT this won't compile
Writeln(GetTypeName(TypeInfo(TMyString))); <--- nor this!!
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
我不知道这两个有什么区别?我承认我不是一个低级专家,但是为什么编译器会以不同的方式处理这个问题呢?我需要它为TMyInt和tmysting类型工作
感谢您的帮助。此示例在XE2中运行良好。(和XE as@StefanGlienke评论) Delphi-2010中的RTTI和泛型在许多方面缺乏实现 因为类型的解释是由编译器magic完成的,所以解决方法是升级。这是一个针对XE和更高版本的修复方法
但是有一个问题。编译器是否报告了一个错误是的当然很抱歉我应该在我的帖子中包括这个:[DCC错误]GenericTypeInfo.dpr(24):E2134类型“TMyInt”没有类型信息当涉及到泛型时,RTTI生成仍然没有100%完成。不是“100%完成”意味着没有可用的变通方法?感谢您提供的信息,这可能是升级的理由,但更愿意在花钱和花大量时间升级其他库之前探索其他解决方案。据我所知,变通方法允许编译,但遗憾的是,仍然没有可用的类型信息(该方法返回nil)…该解决方案有效,谢谢,但我现在遇到了RTTI的运行时类型转换问题。上述解决方案返回TMyRec的TypeInfo,它似乎无法使用RTTI&TValue.Make分配给TMysting属性。有什么想法吗?或者我应该发布另一个问题。@ArnaudBouchez文章说可能是这样,但实际上是这样的在这种情况下,URN是一个有效的TypeInfo。我猜该属性缺少TypeInfo/RTTI,因为TypeInfo应该是兼容的(因为它与TMyString是TMyRec完全相同)@RickWheeler最好打开一个新问题,发布您现在不起作用的代码。
[DCC Error] GenericTypeInfo.dpr(24): E2134 Type 'TMyInt' has no type info
[DCC Error] GenericTypeInfo.dpr(24): E2134 Type 'TMyString' has no type info