1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
program TGeneric2;
{$mode objfpc}{$H+}
type
{ TMyList }
generic TMyList<T> = class(TObject)
type public
TItem = record
Value: T;
end;
type private
PValue = ^T;
var public
Data : T;
public
Cache: T;
procedure SetData(item: T);
end;
procedure TMyList.SetData(item: T);
var
i : integer;
begin
{$IFDEF TestWrongType}
{ The next line should fail for TList(string) }
i:=item;
{$ENDIF}
data:=item;
end;
type
TMyStringList = specialize TMyList<string>;
var
slist : TMyStringList;
begin
slist := TMyStringList.Create;
slist.SetData('Test');
writeln(slist.data);
end.
|