Ссылка на класс из класса общего параметра - PullRequest
4 голосов
/ 15 сентября 2009

У меня есть постоянная структура, и я пытаюсь использовать непатентованные средства, чтобы мне не приходилось создавать новые списочные классы для каждого типа объекта, который я хочу сохранить безопасным способом.

У меня есть метод, который возвращает класс содержащегося объекта в классе списка (поэтому я знаю, какие запросы нужно выполнить и какой объект создать.

В качестве примера это выглядит примерно так:

type

  TMyObject = class

  end;
  TMyObjectClass = class of TMyObject;


  TMyObjectList = class
  public
    function ListClass: TMyObjectClass; virtual; abstract;

  end;

  TMyObjectList<T: TMyObject, constructor> = class(TMyObjectList)
  public
    function ListClass: TMyObjectClass; override;

  end;

implementation

{ TMyObjectList<T> }

function TMyObjectList<T>.ListClass: TMyObjectClass;
begin
  result := T;  //  <==== this wont compile
end;

end.

Есть ли способ вернуть класс универсального параметра в этом случае?

Спасибо

N @ (с использованием Delphi 2009)

Ответы [ 2 ]

6 голосов
/ 15 сентября 2009

Это известная проблема в Delphi 2009. Она была исправлена ​​в 2010 году. Я только что протестировал ее, и ваш код компилируется там отлично.

0 голосов
/ 15 сентября 2009

T не является экземпляром объекта.

В вашем конкретном примере вы должны написать что-то вроде:

результат: = self;

Я думаю, ты выглядишь не в ту сторону ...

...