【发布时间】:2026-01-11 00:40:02
【问题描述】:
我以为我可以有一个指向完全专业化的模板函数的指针,但以下代码无法编译 (MSVC2012)
#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>
using namespace std;
unsigned long hashing_func(string key)
{
unsigned long hash = 0;
for(int i=0; i<key.size(); i++)
{
hash += (71*hash + key[i]) % 5;
}
return hash;
}
bool key_equal_fn2(string t1, string t2)
{
return t1 == t2;
}
template<class T> bool key_equal_fn(T t1, T t2)
{
return t1 == t2;
}
template <> bool key_equal_fn<string>(string t1, string t2)
{
return !(t1.compare(t2));
}
int main ()
{
unordered_map<string, string>::size_type n = 5;
unordered_map<string, string> mymap(n, (const std::hash<string> &)hashing_func, (const std::equal_to<string> &)(key_equal_fn<string>)) ;
mymap["paul"] = "jenna";
mymap["frank"] = "ashley";
return 0;
}
构造函数行返回以下错误:
错误 C2440: 'type cast' : 无法从 'bool (__cdecl *)(T,T)' 转换 to 'const std::equal_to<_ty> &'
【问题讨论】:
-
无法将参数 3 从 'bool (__cdecl *)(T,T)' 转换为 'const std::equal_to<_ty> &'
-
从不使用 C 风格的强制转换。
-
没有转换。 (1) 将
equal_to<string>类型的对象提供给unordered_map<...>的构造函数,或者 (2) 提供您自己的类型,而不是unordered_map<...>的默认模板参数。