我试图在RTTI中使用通用记录,但是Type遇到了一个问题。有人知道为什么以下内容不使用Delphi 2010编译吗?
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.上面指出的行会生成以下编译器错误:
[DCC Error] GenericTypeInfo.dpr(24): E2134 Type 'TMyInt' has no type info
[DCC Error] GenericTypeInfo.dpr(24): E2134 Type 'TMyString' has no type info我不知道2有什么区别?我承认我不是一个低水平的专家,但是为什么编译器对此有不同的看法呢?我需要它为TMyInt和TMyString类型工作。
谢谢你的帮助。
发布于 2013-08-09 08:33:24
这是一个为XE和更高版本修复的bug in Delphi 2010。
但是有一个workaround。
发布于 2013-08-09 07:26:12
这个示例在XE2中工作得很好。( XE为@StefanGlienke注释)。
RTTI和Delphi-2010中的泛型在许多方面缺乏实现。
由于类型的解释是由编译器魔术完成的,所以解决方法是升级。
https://stackoverflow.com/questions/18141561
复制相似问题