1

次のタイプを検討してください

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

不可能です。

実際のオブジェクトには TRec 関連のコードがあるため、PRecs をパラメーターにすることもできません。

現代の Object Pascal に解決策はありますか? そうでない場合は、このような問題を解決できるジェネリック対応言語が他にあるのでしょうか?

4

2 に答える 2

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、必要に応じて。

于 2012-11-15T14:02:09.057 に答える
2

一般的な構文が少し混乱しています。これを試して:

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

  TGenericRecObject<T> = class
  private
    FRecs: TRecArray<T>;
  public
    property Recs: TRecArray<T> read FRecs;
  end;
于 2012-11-15T14:04:44.700 に答える