如何通过Delphi XE中的指针获取记录的类型信息?

Har*_*uki 2 delphi pointers record rtti delphi-xe

如果我有一个TList,其中有许多不同记录类型的指针,我如何访问TList中的不同记录的值?

有没有办法获取那些引用的recods的记录类型或类型信息?

我目前正在使用Delphi XE.

Rem*_*eau 6

您的不同记录类型需要一个公共标题.然后,您可以首先将列表项指针强制转换为该标头类型,以确定要转换为下一个的记录类型.例如:

type
  TRecType = (recA, recB, recC);

  PRecHeader = ^TRecHeader;
  TRecHeader = record
    RecType: TRecType;
    ...
  end;

  PRecordA = ^TRecordA;
  TRecordA = record
    Header: TRecHeader;
    IntValue: Integer;
  end;

  PRecordB = ^TRecordB;
  TRecordB = record
    Header: TRecHeader;
    StrValue: String;
  end;

  PRecordC = ^TRecordC;
  TRecordC = record
    Header: TRecHeader;
    DblValue: Double;
  end;

var
  PRec: Pointer;
begin
  PRec := List[Index];
  case PRecHeader(PRec)^.RecType of
    recA: use PRecordA(PRec)^.IntValue as needed ...
    recB: use PRecordB(PRec)^.StrValue as needed ...
    recC: use PRecordC(PRec)^.DblValue as needed ...
  end;
end;
Run Code Online (Sandbox Code Playgroud)

  • 原始多态性。FPC 1.0.x 的编译器树就是这样。 (2认同)