我正在使用Delphi XE3中的RTTI做一些工作,到目前为止,这导致对以下过程的调用:

procedure MyProc( ARecordInstance : pointer; ARecordType : PTypeInfo );


我将这个例程称为:

MyProc( @MyRec TypeInfo( TMyRec ));


这一切都很好。

我想到我可以将程序简化为:

procedure MyProc( var ARecord ); or procedure MyProc( ARecord : pointer );


..如果我可以在过程中从ARecord获取类型信息。尽管使用“实例”(例如“ ARecord”),TypeInfo会给出“期望类型标识符”错误,这很公平。有什么方法可以将单个指针引用传递给记录,然后从记录中提取类型?

谢谢

最佳答案

如果需要支持多种类型,则可以将过程包装在具有Generic参数的类中,然后该过程将知道其使用的数据类型,例如:

type
  MyClass<T> = class
  public
    class procedure MyProc(var AInstance : T);
  end;

class procedure MyClass<T>.MyProc(var AInstance : T);
var
  InstanceType: PTypeInfo;
begin
  InstanceType := TypeInfo(T);
  //...
end;




MyClass<TMyRec>.MyProc(MyRec);

07-28 03:28