我正在创建一个具有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