考虑以下记录:
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
也需要一个THasher<TMyRecord>
,我想知道实现它的规范方法。该函数需要具有以下形式:
function MyRecordHasher(const Value: TMyRecord): Integer;
begin
Result := ???
end;
我希望我需要调用BobJenkinsHash
记录值的两个字段,然后以某种方式将它们组合起来。这是正确的方法,我应该如何结合它们?
我不使用的原因TEqualityComparison<TMyRecord>.Default
是它使用了CompareMem
,因此由于记录的填充而将是不正确的。