Можно ли сделать специализацию шаблона на конкретный параметр шаблона 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...