Можно ли сделать специализацию шаблона на конкретный параметр шаблона C++

Допустим у меня есть шаблонный класс с двумя параметрами.

template <class key, class value>
class HashMap
{
    ...

    size_t HashFunction(const key& k)
    {
        string s = to_string(k);
        size_t n = s.size();
        unsigned long long sum = 0;
        for (size_t i = 0; i < n; i++)
            sum += s[i];
        return sum % mod;
    }

    ...
}

И в данном случае to_string() со string работать просто не будет. И мне нужно будет создать специализацию шаблона. Но как создать специализацию только на параметр key?

Я примерно говорю про это:

template<>
size_t HashMap<string, LUBOI TIP>::HashFunction(const key& k)
{
    size_t n = k.size();
    unsigned long long sum = 0;
    for (size_t i = 0; i < n; i++)
        sum += k[i];
    return sum % mod;
}

Ответы (1 шт):

Автор решения: Harry

Вы хотите это?

template <class value>
struct HashMap<string, value>
{
    size_t HashFunction(const string& k)
    {
        string s = k;

Или хотите сделать HashFunction шаблонной внутри шаблонного класса?

Есть и такой вариант:

template <class key, class value>
struct HashMap
{
    size_t HashFunction(const key& k)
    {
        string s;
        if constexpr(is_same_v<key,string>)
            s = k;
        else
            s = to_string(k);

Но учтите, to_string не будет работать не только для string...

→ Ссылка