3

我正在尝试将通用记录与 RTTI 一起使用,但遇到了 Type Info 的问题。有谁知道为什么以下内容不能使用 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 类型工作。

谢谢你的帮助。

4

2 回答 2

7

这是Delphi 2010中的一个错误,已针对 XE 及更高版本进行了修复。

但是有一个解决方法

于 2013-08-09T08:33:24.487 回答
3

此示例在 XE2 中运行良好。(和 XE 作为@StefanGlienke 评论)。

Delphi-2010 中的 RTTI 和泛型在很多方面都缺乏实现。

由于类型的解释是由编译器魔术完成的,因此解决方法是升级。

于 2013-08-09T07:26:12.023 回答