首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于通用记录的Delphi TypeInfo

用于通用记录的Delphi TypeInfo
EN

Stack Overflow用户
提问于 2013-08-09 06:58:20
回答 2查看 3.8K关注 0票数 3

我试图在RTTI中使用通用记录,但是Type遇到了一个问题。有人知道为什么以下内容不使用Delphi 2010编译吗?

代码语言:javascript
复制
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.

上面指出的行会生成以下编译器错误:

代码语言:javascript
复制
[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类型工作。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-09 08:33:24

这是一个为XE和更高版本修复的bug in Delphi 2010

但是有一个workaround

票数 7
EN

Stack Overflow用户

发布于 2013-08-09 07:26:12

这个示例在XE2中工作得很好。( XE为@StefanGlienke注释)。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18141561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档