Каков канонический способ написания хеш-функции для 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)

Ваш ответ на вопрос