標準庫將std :: hash作爲專門用於不同類型的模板結構體來實現。它是這樣使用的:爲什麼std ::散列結構而不是函數?
#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;
}
這兩個例子是相同的,唯一的區別在於第二個對象是未命名的。 – user2485710
無序的關聯容器有一個模板類型參數來指定散列;這允許使用有狀態的哈希對象(例如,使用在哈希上異或的特殊值)。獲取函數模板專業化的類型沒有一個很好的語法。 – dyp
@ user2485710第一個例子編譯,第二個例子不編譯。第二個需要寫成'std :: hash()(1337)'來使用一個未命名的臨時結構體。 –
hvd