如何解决这个模板函数的模糊错误

时间:2014-10-25 13:05:42

标签: c++ templates template-function

我编写了一个模板函数,用于测试给定容器中是否有键或值。

template<typename T>
bool has_key(const T &t, const typename T::key_type &key) {
    return t.find(key) != t.end();
}
template<typename T>
bool has_key(const T &t, const typename T::value_type &v) {
    for (auto i = t.begin(); i != t.end(); i++) {
        if (*i == v) return true;
    }
    return false;
}

它适用于std::mapstd::vector。但是当容器为std::set时,会发现一个模糊的错误。由于std::set同时定义了key_typevalue_type,因此它们属于同一类型。所以我的问题是如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

使用std :: set两个方法将具有相同的签名。您需要通过更改其中一个方法名称或添加虚拟参数来消除歧义。 E.g。

bool has_key_for_value(const T &t, const typename T::value_type &v);

请注意,您可以使用std::find

直接轻松解决问题