当我尝试编译时,终于告诉我thehash2不是模板,我很困惑。
我疯了吗?
template<typename Symbol>
class thehash
{
public:
size_t operator()(const Symbol & item)
{
static thehash2<string> hf;
return hf(item.getData());
}
};
template<typename string>
class thehash2<string>
{
public:
size_t operator()(const string & key)
{
size_t hashVal = 0;
for(char ch : key)
hashVal = 37 * hashVal + ch;
return hashVal;
}
};
答案 0 :(得分:1)
template<typename string>
class thehash2<string>
{
这是一个错误。你可能想写:
template<typename T>
class thehash2
{
请注意, - 如评论中所述 - 您不应将string
用作模板中的类型名称。模板参数的最常见名称通常是单个字母 - T
,U
,......这样它们就不会轻易与实际类型名称混淆。
第二个选项:
class thehash2 : public thehash<std::string>
{
(取决于您的实际需要)