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