2018-05-17 23:32:03 +03:00
|
|
|
|
type
|
|
|
|
|
|
IEq<T> = interface
|
|
|
|
|
|
function equal(x, y: T): boolean;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
Ord<T1, EqT> = abstract class
|
|
|
|
|
|
where EqT: IEq<T1>, constructor;
|
|
|
|
|
|
public
|
|
|
|
|
|
|
|
|
|
|
|
function equal(x, y: T1): boolean; virtual;
|
|
|
|
|
|
begin
|
|
|
|
|
|
var eqInst := new EqT;
|
|
|
|
|
|
Result := eqInst.equal(x, y);
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function equal<T, EqT>(v1, v2: T): boolean; where EqT: IEq<T>, constructor;
|
|
|
|
|
|
begin
|
2018-05-18 18:30:24 +03:00
|
|
|
|
var eqtinstance := new EqT;
|
2018-05-17 23:32:03 +03:00
|
|
|
|
Result := eqtinstance.equal(v1, v2);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
|
end.
|