Здравствуйте, Chorkov, Вы писали:
BFE>>Можно ли используя structured bindings написать шаблонную универсальную хэш-функцию для std::unordered_map при условияя, что для каждого из полей структуры есть (стандартная) хэш функция?
C>Можно.
C>Стандартной нет.
C>Есть boost::pfr::hash
C>https://www.boost.org/doc/libs/1_87_0/doc/html/reference_section_of_pfr.html#doxygen.reference_section_of_pfr.functors_8hpp
C>https://www.boost.org/doc/libs/1_87_0/doc/html/doxygen/reference_section_of_pfr/structboost_1_1pfr_1_1hash.html
Какая-то очень сложная реализация: я так и не понял как они получают tuple с ссылками на поля...
Думаю можно по-простому, написал вот такой код:
template<typename TStruct>
struct St2Hash
{
std::size_t operator()(const TStruct& k) const
{
const auto& [m1, m2] = k;
return std::hash<typename std::remove_cv<decltype(m1)>::type>()(m1) ^ (std::hash<typename std::remove_cv<decltype(m2)>::type>()(m2) << 1);
}
};