考慮下面的記錄:爲TEqualityComparer.Construct編寫散列函數的規範方法是什麼?
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
,因此記錄的填充會導致錯誤。
實際需要的哈希值,在您的情況?否則,我認爲返回的值不會被使用,所以它可以是任何東西,甚至是像1這樣的字面值。還是我在這裏錯了? –
@Rudy不需要散列值。我可以返回一個真實的常數。或者引發'EMethodNotImplemented'異常。但我很好奇如何做對。 –
啊,好吧。好奇心似乎對貓有點不好,但是。 ;-) –