我正在 C++-11 中创建一个模板缓存库,我想在其中对键进行哈希处理。我想将默认值std::hash
用于原始/预定义类型,如用户定义类型int, std::string, etc.
的用户定义哈希函数。我的代码目前如下所示:
template<typename Key, typename Value>
class Cache
{
typedef std::function<size_t(const Key &)> HASHFUNCTION;
private:
std::list< Node<Key, Value>* > m_keys;
std::unordered_map<size_t, typename std::list< Node<Key, Value>* >::iterator> m_cache;
size_t m_Capacity;
HASHFUNCTION t_hash;
size_t getHash(const Key& key) {
if(t_hash == nullptr) {
return std::hash<Key>(key); //Error line
}
else
return t_hash(key);
}
public:
Cache(size_t size) : m_Capacity(size) {
t_hash = nullptr;
}
Cache(size_t size, HASHFUNCTION hash) : m_Capacity(size), t_hash(hash) {} void insert(const Key& key, const Value& value) {
size_t hash = getHash(key);
...
}
bool get(const Key& key, Value& val) {
size_t hash = getHash(key);
...
}
};
我的主要功能如下所示:
int main() {
Cache<int, int> cache(3);
cache.insert(1, 0);
cache.insert(2, 0);
int res;
cache.get(2, &res);
}
在编译上面的代码时,我收到以下错误:
error: no matching function for call to ‘std::hash<int>::hash(const int&)’
return std::hash<Key>(key);
谁能在这里帮助我并指出我遗漏了什么或做错了什么?