如何通过泛型获得类型

时间:2015-03-18 20:13:59

标签: delphi delphi-xe2

假设我有这个:

TClassAncestor = class;

TAbstractGeneric = class;

TGenericContainer<T : TClassAncestor, constructor> = class(TAbstractGeneric);

THoldedClass = class(TClassAncestor);

TMyClass = class(TClassAncestor)
strict private
   FExample : TGenericContainer<THoldedClass>;
end;

我想要的是一种检索类字段FExample中包含的类型的方法,所以在这种情况下,THoldedClass使用RTTI

到目前为止,我到了这一点:

procedure TryToExtract();
var 
  ARTTI : TRttiType;
  AField : TRttiField;
  ATypeData : PTypeData;
begin
  ARTTI := TRttiContext.Create().GetType(TMyClass);
  for AField in ARTTI.GetFields do
    if(AField.FieldType.TypeKind = tkClass) and (AField.Visibility = mvPrivate) then
      begin
        ATypeData := GetTypeData(AField.FieldType.Handle);
        if(ATypeData^.ClassType.InheritsFrom(TAbstractGeneric)) then
          begin
            //...
          end;
      end;
end;

我不知道在这一点之后该做什么,所以我感谢任何帮助或建议。

0 个答案:

没有答案