说我有以下代码:
template<typename K, typename V>
int Hash<K, V>::hf(const K& key)
{
if(K == typeid(string))
{
return MurmurHash2(key.c_str(), key.size());
}
else
{
return key*2654435761;
}
}
有可能以某种方式做到这一点吗?如果没有,你能推荐一种方法来完成同样的事情吗?
答案 0 :(得分:0)
您可以使用(部分)模板专业化:
close()
答案 1 :(得分:0)
以下是两种方法:
1)模板专业化(为模板参数创建一个特例(这里:std::string
))
template<typename K, typename V>
int Hash(const K& key)
{
return key * 2654435761;
}
template<typename V>
int Hash(const std::string& key)
{
return MurmurHash2(key.c_str(), key.size());
}
2)使用typeid
比较类型
template<typename K, typename V>
int Hash(const K& key)
{
if (typeid(K).hash_code() == typeid(std::string).hash_code())
return MurmurHash2(key.c_str(), key.size());
return key * 2654435761;
}