3

Array(Array of ) 型のメンバーを持つジェネリック リスト クラスを作成しています。問題は、クラスが byte から TObject を継承する型までの型に使用されることになっているため、クラスの破棄です。

具体的には:

destructor Destroy;
var elem:T;
begin
  /*if(T is Tobject) then  //Check if T inherits TObject {Compiler error!}
    for elem in FData do TObject(elem).Free;*/    // do not know how to do it

  SetLength(FItems,0); //FItems : Array of T
  inherited Destroy;
end;

たとえば、T が TObject であるかどうかを確認して、typeidentifier がクラスの場合にすべてのメンバーを解放するにはどうすればよいですか?

4

1 に答える 1

3

TypeInfo コンパイラのマジック関数を使用して、型 T の型情報を取得できます。TypInfo ユニットで宣言されている PTypeInfo にキャストできるポインタを返します。そう:

if PTypeInfo(typeInfo(T)).Kind = tkClass then
  //do whatever
于 2010-04-24T16:51:08.583 に答える