使用模板进行参数转换时出错

时间:2013-04-24 05:36:03

标签: c++ templates

我有一个函数模板,它接受一个向量和给定类型的元素,并返回向量中元素的位置。这是此功能模板的代码:

template<class T>
int findElement(const vector<T> &vec, const T &ele)
{
    for(size_t i = 0; i < vec.size(); i++)
    {
        if(ele == vec[i])
            return i;
    }
    return -1;
}

这是函数调用:

findElement<double>(intVec, ele);

但是当我调用函数时出现此错误:

error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty,_Ax> &'

即使我在函数模板定义中删除了向量的const,这个错误也是一样的:

error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &'

但是,当我将函数调用为

findElement(intVec, ele)

我没有收到任何错误。

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:3)

似乎编译器无法将vector<double>转换为vector<int>。因为按逻辑方式,intVec是整数的向量,不是吗?你说编译器,你想要vector双打。 您无法将vector<T>转换为vector<U>,因为vector没有关注conversion constructor,而且很不错。