我有一个简单的问题,因此您可以看到我有一个哈希函数,该函数返回long并接受K键。这个K是我的模板类HashTable中的一个类型名,我的哈希函数不包含所有类型,因此我需要根据K是什么类型对函数hashfct进行函数重载。如果K键是函数hashfct的参数,我该如何专门化?换句话说,在这种特定的情况下,如果K键是一个函数参数,那么专门用于K键的语法是什么?
template <typename K, V> class HashTable
{
//Code goes here...
}
long hashfct(K key)
{
//Code goes here...
}
最佳答案
template <typename KeyType>
long hashfct(KeyType key) = delete;
template <>
long hashfct<char>(char key) {
return key;
}
int main() {
int a = 0;
char c = 'a';
//hashfct(a); //Compile error: hashfct<int>(int) is deleted
hashfct(c); //Ok, calls hashfct<char>(char)
return 0;
}
附带说明,您可以使用或专门化
std::hash
(有关专门化std::hash
的信息,请参见this question)。