我写了一个模板函数,用于测试给定容器中是否有键或值。
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::map
和 std::vector
。但是当容器为std::set
时,会发现一个不明确的错误。因为 std::set
同时定义了 key_type
和 value_type
,并且它们是同一类型。所以我的问题是如何解决这个问题?谢谢!
最佳答案
使用 std::set 两种方法将具有相同的签名。您需要通过更改方法名称之一或添加虚拟参数来消除歧义。例如
bool has_key_for_value(const T &t, const typename T::value_type &v);
但是请注意,您可以直接使用 std::find 轻松解决您的问题。
关于c++ - 如何解决这个模板函数的二义性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26562697/