Robert W.

Robert W. Programista

Temat: Typy generyczne - problem

Drodzy forumowicze (mam nadzieję, że nikogo nie uraziłem takim tytułem ;)

Mam problem z kodem opartym na typach generycznych. Program kompiluje na Delphi XE.

Poniższy fragment to tylko wycinek, który powoduje problemy. Czy mógłby ktoś podpowiedzieć dlaczego kompilator nie pozwala tego skompilować?

Na "ludzkie oko" powinien wiedzieć, że przekazywana lista to TObjectList<TItem> (klasa TItem przekazana jest jako typ T w klasie TItems) ...

Jakieś wskazówki dlaczego tak jest i jak można z tego wybrnąć?

Będę wdzięczny za wszelką pomoc i podpowiedzi.

Interface :



type
TItem = class
end;

type
IItemsLoader = interface
procedure LoadAll(AList : TObjectList<TItem>);
end;

type
TItemsLoader = class(TInterfacedObject, IItemsLoader)
public
procedure LoadAll(AList : TObjectList<TItem>);
end;

type
IItems<T : TItem> = interface
function LoadAll : TObjectList<T>;
end;

type
TItems<T : TItem> = class(TInterfacedObject, IItems<T>)
private
FItemsLoader : TItemsLoader;
public
constructor Create;
destructor Destroy; override;
function LoadAll : TObjectList<T>;
end;



Implementation:


{ TItemLoader }

procedure TItemsLoader.LoadAll(AList: TObjectList<TItem>);
begin
/// jakieś operacje manipulujące na AList
end;

{ TItems<T> }

constructor TItems<T>.Create;
begin
FItemsLoader := TItemsLoader.Create;
end;

destructor TItems<T>.Destroy;
begin
FItemsLoader.Free;
inherited;
end;

function TItems<T>.LoadAll: TObjectList<T>;
begin
Result := TObjectList<T>.Create();

/// Linia powodująca błąd kompilacji
/// FItemsLoader.LoadAll(Result);
end;
Robert W.

Robert W. Programista

Temat: Typy generyczne - problem

Temat już został wyjaśniony. Otrzymałem odpowiedź na StackOverflow. Jeżeli kogoś zainteresuje:

http://stackoverflow.com/q/10354710/1361581

Pozostała kwestia refaktoringu, abym jednak miał to co chcę osiągnąć :) Działam...

Następna dyskusja:

problem z odczytem pliku XML




Wyślij zaproszenie do