Общее преобразование TypeIdenitifier. Как? - PullRequest
1 голос
/ 18 апреля 2010

Как мне преобразовать TypeIdenitifier в тип класса? Мне нужно использовать неявное преобразование.

type
  TMyChildArray<T>=class(TMyArray<T>)
    private
      FData:Array of T;
      procedure AddEnd();
  end;

  TTypeIdenitifierParentClass=class(TAnotherParentClass)
    protected
      TestField:Cardinal;
  end;


  procedure TMyChildArray<T>.AddEnd();
  var elem:T;
  begin
    for elem in Fdata do
      TTypeIdenitifierParentClass(elem).TestField:=0;
  end;

При неявном преобразовании я получаю «Неверное преобразование типов». TTypeIdenitifierParentClass (elem) .TestField: = 0; ".

Принцип, который я хочу использовать, заключается в том, что TypeIdenitifier будет представлять класс, который происходит от TTypeIdenitifierParentClass. Существует много типов классов, но все они наследуют этот класс.

Как мне это сделать?

1 Ответ

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

Причина, по которой delphi жалуется на приведение, в том, что у компилятора нет возможности узнать, можно ли привести тип T к типу TTypeIdenitifierParentClass. Вам нужно ограничить T для классов, происходящих из "TTypeIdenitifierParentClass"

Попробуйте следующее

type
  TTypeIdenitifierParentClass=class(TAnotherParentClass)
    protected
      TestField:Cardinal;
  end;

  TMyChildArray<T: TTypeIdenitifierParentClass>=class(TMyArray<T>)
    private
      FData:Array of T;
      procedure AddEnd();
  end;

  procedure TMyChildArray<T>.AddEnd();
  var elem:T;
  begin
    for elem in Fdata do
      elem.TestField:=0;
  end;
...