我有一个简单的问题,因此您可以看到我有一个哈希函数,该函数返回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 specialization

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)。

09-28 11:09