我正在创建一个具有Array(Array of)类型成员的通用列表类。
问题是类破坏,因为该类应该用于从字节到继承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,以便如果typeidenitifier是类,则可以释放每个成员?

最佳答案

您可以使用TypeInfo编译器魔术函数获取类型T的类型信息。它返回一个可以转换为PTypeInfo的指针,该指针在TypInfo单元中声明。所以:

if PTypeInfo(typeInfo(T)).Kind = tkClass then
  //do whatever

10-08 16:03