有没有办法检查模板的数据类型是什么?

时间:2016-03-30 21:25:18

标签: c++ template-classes

说我有以下代码:

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;
        }

}

有可能以某种方式做到这一点吗?如果没有,你能推荐一种方法来完成同样的事情吗?

2 个答案:

答案 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;
}