Delphi ジェネリクス
DelphiのMLでジェネリクスについての質問があったので勉強がてら調べてみた。
http://www.freeml.com/delphi-users/1505/latest
普段はDelphi7をメインに使ってるんでジェネリクスはさっぱりですね。
ただ、グローバル関数を定義出来なかったり、演算子をそのまま使えなかったりと中々複雑。
MLへの回答だと、比較処理を独自のものに差し替えられないので比較オブジェクトを渡せるようにオーバーロードで定義した方が良いのかも。
比較オブジェクトを差し替える時は、無名関数とかってのを使うのかなぁ。
自分で書いておきながら、TEqualityComparer
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;