我正在使用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);