次のレコードを検討してください。
TMyRecord = record
b: Boolean;
// 3 bytes of padding in here with default record alignment settings
i: Integer;
end;
実装したいIEqualityComparer<TMyRecord>。そうするために、私は電話したいと思いますTEqualityComparer<TMyRecord>.Construct。TEqualityComparison<TMyRecord>これは私に問題を提示しないで供給される必要があります。
ただし、Constructaも必要であり、THasher<TMyRecord>それを実装するための標準的な方法を知りたいと思います。関数は次の形式である必要があります。
function MyRecordHasher(const Value: TMyRecord): Integer;
begin
Result := ???
end;
BobJenkinsHashレコード値の両方のフィールドを呼び出して、それらを何らかの方法で組み合わせる必要があると思います。これは正しいアプローチですか、そしてそれらをどのように組み合わせる必要がありますか?
私が使用しない理由は、レコードのパディングのためTEqualityComparison<TMyRecord>.Defaultに使用するCompareMemため、正しくないためです。