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 44 45 46 47 48 49 50
|
program GenericExamples;
{$mode objfpc}{$H+}
// generics
type
generic TArr<T> = array[0..2] of T;
generic TProc<T> = procedure(Arg: T);
generic TRecG<T> = record
F: T;
end;
TGenericArray<T> = array of T;
IGenericInterface<T> = interface
function DoSomething(Arg: T): T;
end;
TGenericClass<T1,T2> = class(TInterfacedObject, IGenericInterface<T1>)
F: T2;
type
Intf = IGenericInterface<Integer>;
function DoSomething(Arg: T1): T2;
function Test(Arg: Intf): Intf;
end;
generic TGen<_T> = class
public
type
T_TArray = array of _T;
private
var
w: T_TArray;
public
constructor Create(Value: _T);
end;
const
RecLongInt: TRecG<longint> = (F:0);
var
ArraySpecialize: TGenericArray<Integer>;
ClassSpecialize: TGenericClass<Integer,String>;
function TGenericClass.DoSomething(Arg: T1): T2;
begin
end;
begin
FooInt := TGenericClass<Integer,String>.Create;
end.
|