如何使用引用泛型类型的复杂类型

时间:2012-11-15 13:55:37

标签: delphi generics fpc

考虑以下类型

type
  TRecs = array[0..100000] of TRec;
  PRecs = ^TRecs;

  TRecObject = class
  private
    fRecs: PRecs;
  public
    constructor Create;
    property    Recs: PRecs read fRecs;
  end;

我想让TRec成为通用参数。问题是我需要放在类范围之外。因为像

这样的东西
 T<MyType>Object = class
 private
   fRecs: ^array[0..100000] of MyType;
 public
    property    Recs: ^array[0..100000] of MyType read fRecs
 end

是不可能的。

使PRecs成为参数也不是一个选项,因为在我的实际对象中存在与TRec相关的代码。

现代Object Pascal中是否有解决方案?如果没有,只是好奇是否有任何其他泛型语言可以解决这样的问题?

2 个答案:

答案 0 :(得分:3)

我不完全确定我理解你的问题,但我认为你正在寻找这样的事情:

type
  TMyObject<T> = class
  public
    type
      PArr = ^TArr;
      TArr = array[0..100000] of T;
  private
    fRecs: PArr;
  public
    property Recs: PArr read fRecs
  end;

那就是说,我看不出那个班级的意义。您可以使用TList<T>中的Generics.Collections

如果您需要一个数组,那么您可以根据需要使用动态数组:TArray<T>array of T

答案 1 :(得分:2)

你的通用语法有点混乱。试试这个:

  TRecArray<T> = array[0..100000] of T;

  TGenericRecObject<T> = class
  private
    FRecs: TRecArray<T>;
  public
    property Recs: TRecArray<T> read FRecs;
  end;