program tgenlist;
{$mode objfpc}{$H+}
uses
fgl;
type
TAnyObject = class
end;
generic TGenAOList<T: TAnyObject> = class(specialize TFPGMap<String, T>)
end;
{ type for any TAnyObject descendant }
TAOList = specialize TGenAOList<TAnyObject>;
TCarObject = class(TAnyObject)
end;
TMotoObject = class(TAnyObject)
end;
TCarList = specialize TGenAOList<TCarObject>;
TMotoList = specialize TGenAOList<TMotoObject>;
var
cl: TCarList;
ml: TMotoList;
moto: TMotoObject;
begin
cl := TCarList.Create;
try
ml := TMotoList.Create;
cl.Add('subawu impreza', TCarObject.Create);
ml.Add('yamaha r1', TMotoObject.Create);
{ no "as" here }
moto := ml['yamaha r1'];
finally
cl.Free;
ml.Free;
end;
end.