Как проверить, является ли TypeIdenitifier (T) объектом? - PullRequest
2 голосов
/ 24 апреля 2010

Я создаю общий класс списка, который имеет член типа 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, чтобы я мог освободить каждого члена, например, если идентификатор типа является классом?

1 Ответ

2 голосов
/ 24 апреля 2010

Вы можете получить информацию о типе вашего типа T с помощью магической функции компилятора TypeInfo. Он возвращает указатель, который вы можете привести к PTypeInfo, который объявлен в модуле TypInfo. Итак:

if PTypeInfo(typeInfo(T)).Kind = tkClass then
  //do whatever
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...