c++ - 如何解决这个模板函数的二义性错误

标签 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,并且它们是同一类型。所以我的问题是如何解决这个问题?谢谢!

最佳答案

使用 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/

相关文章:

css - 如何在 Vue.js 3 中动态绑定(bind)样式属性?

C++ 在函数中转换指针

c++ - 模板类的模板友元函数

C++ 未解析的带有模板函数调用的外部符号

c++ - 将函数传递给可变函数模板

php - 如何在 PHP 中回显 HTML?

c++ - CMake在编译Google的protobuf示例时找不到protobuf

c++ - 你如何在 C++ 中使用 'realloc'?

c++ - 查找与欧几里德距离以外的调色板算法最接近的颜色

C++ 对 LAPACKE 的调用在单个线程上运行,而 NumPy 使用所有线程