Delphi ジェネリクス

DelphiのMLでジェネリクスについての質問があったので勉強がてら調べてみた。
http://www.freeml.com/delphi-users/1505/latest

普段はDelphi7をメインに使ってるんでジェネリクスはさっぱりですね。
ただ、グローバル関数を定義出来なかったり、演算子をそのまま使えなかったりと中々複雑。

MLへの回答だと、比較処理を独自のものに差し替えられないので比較オブジェクトを渡せるようにオーバーロードで定義した方が良いのかも。
比較オブジェクトを差し替える時は、無名関数とかってのを使うのかなぁ。
自分で書いておきながら、TEqualityComparer.Defaultがどういう仕組みなのか今ひとつ理解出来ない。

TCompareValues = class
  class function OrValue<T>(Value: T; Compares: array of T): Boolean; overload
  class function OrValue<T>(Value: T; Compares: array of T; AComparer: IEqualityComparer<T>): Boolean; overload;
end;

class function TCompareValues.OrValue<T>(Value: T; Compares: array of T): Boolean;
begin
  Result := OrValue<T>(Value, Compares, TEqualityComparer<T>.Default);
end;

class function TCompareValues.OrValue<T>(Value: T; Compares: array of T; AComparer: IEqualityComparer<T>): Boolean;
var
  Idx: Integer;
begin
  Result := False;
  for Idx := Low(Compares) to High(Compares) do
  begin
    if AComparer.Equals(Value, Compares[Idx]) then
    begin
      Result := True;
      break;
    end;
  end;
end;