Как специализировать имя шаблона, которое используется в качестве параметра функции? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть простой вопрос, так как вы можете видеть, что у меня есть хеш-функция, которая возвращает long и получает ключ K. Это K является типичным именем в моем шаблонном классе HashTable, моя хеш-функция не охватывает все типы, поэтому мне нужно выполнять перегрузку функций для моего хеш-функции в зависимости от типа K. Как мне специализировать клавишу K, если она является параметром функции hashfct? Другими словами, каков синтаксис для специализации клавиши K в этом конкретном случае, когда это параметр функции?

template <typename K, V> class HashTable
{
//Code goes here...
}

long hashfct(K key)
{
//Code goes here...
}

1 Ответ

1 голос
/ 06 октября 2019

Используйте шаблон специализации :

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см. этот вопрос ).

...