“没有匹配函数调用...”用于模板功能

时间:2016-01-07 06:20:02

标签: c++ templates

我正在尝试使用二进制搜索模板,当我使用原语“int”运行它时代码运行正常但是当我用“string”运行它时我得到了错误

“没有匹配函数调用binary_search_template”

为什么它适用于整数而不是字符串?

这是代码

main{
 std::vector<string> e;
    e.push_back("a");
    e.push_back("b");
    e.push_back("c");

int index = binary_search_template(e, 0, d.size()-1.0, "a"); //error for strings but not ints

}

头文件

template<typename T>
int binary_search_template(std::vector<T>& a, int from, int to, T value);

template<typename T>
int binary_search_template(std::vector<T>& a, int from, int to, T value)
{
    if (from > to) {
        return -1;
    }
    int mid = (to + from)/2;

    if (a[mid] == value ) {
        return mid;
    }else if (a[mid] < value) {
        return binary_search_template(a, mid+1, to, value);
    }else {
        return binary_search_template(a, from, mid, value);
    }
}

1 个答案:

答案 0 :(得分:3)

当您使用T和字符串文字时,编译器会看到std::vector<std::string>类型的两个候选项:

  1. std::string
  2. char const*
  3. 你需要记住,例如,将参数传递为std::string("a")。或者,您可以为最后一个参数使用其他模板参数。