Стандартная библиотека реализует std :: hash как структуру шаблона, которая специализирована для разных типов. Он используется следующим образом:Почему std :: hash struct вместо функции?
#include <iostream>
#include <functional>
int main()
{
std::hash<int> hasher;
std::cout << hasher(1337) << std::endl;
return 0;
}
Мой вопрос в том, что является аргументом за этот выбор дизайна. Почему она не реализована в виде шаблонной функции и использовать так:
#include <iostream>
#include <functional>
int main()
{
std::cout << std::hash<int>(1337) << std::endl;
return 0;
}
2 примера идентичны, единственное отличие состоит в том, что во втором объект не указан. – user2485710
Неопределенные ассоциированные контейнеры имеют параметр типа шаблона для указания хэша; это позволяет использовать объекты хэш-объекта с сохранением состояния (например, используя специальное значение, которое XORed на хэше). Получение типа специализированной функции шаблона не имеет сильного синтаксиса. – dyp
@ user2485710 Первый пример компилируется, второй - нет. Второй должен быть записан как «std :: hash() (1337)» для использования неназванной временной структуры. –
hvd