函数重载,无法减少模板参数

Cla*_*nry 0 c++ templates iterator stl overloading

我正在尝试重载一个Sum函数,该函数接受[list或vector] start和end迭代器作为参数.这个编译错误让我很困惑.相关代码如下:

template <typename T1, typename T2>
const double Sum(const typename T1::const_iterator& start_iter, const typename T2::const_iterator& end_iter)
{// overloaded function that calculates sum between two iterators
    typename T1::const_iterator iterator_begin = start_iter;
    typename T2::const_iterator iterator_end = end_iter;

    double my_sum = 0;

    for (iterator_begin; iterator_begin != iterator_end; iterator_begin++)
        my_sum += *iterator_begin;

    return my_sum;      
}

int main()
{

list<double> test_list(10,5.1);
cout << Sum(test_list.begin(), test_list.end()); // compiler errors here

}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误:

iterators.cpp(72):错误C2783:'const double Sum(const T1 :: const_iterator&,const T2 :: const_iterator&)':无法推导'T1'的模板参数

iterators.cpp(72):错误C2783:'const double Sum(const T1 :: const_iterator&,const T2 :: const_iterator&)':无法推断'T2'的模板参数

iterators.cpp(72):错误C2780:'const double Sum(const std :: map&)':期望1个参数 - 提供2个

iterators.cpp(72):错误C2780:'const double Sum(const T&)':期望1个参数 - 提供2个

编译器如何不识别我试图用两个输入调用Sum函数?我正在调用该函数错误?

谢谢!

yur*_*hek 5

你不需要告诉它的迭代器必须是某些类型的成员T1T2,只是模板它的迭代器类型本身:

template <typename Iter>
const double Sum(Iter iterator_begin, Iter iterator_end)
{
    double my_sum = 0;
    for (; iterator_begin != iterator_end; ++iterator_end)
        my_sum += *iterator_begin;
    return my_sum;      
}

int main()
{
    std::list<double> test_list;
    std::cout << Sum(test_list.begin(), test_list.end());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

还有一个标准的std :: accumulate可以做到这一点:

int main()
{
    std::list<double> test_list;
    std::cout << std::accumulate(test_list.begin(), test_list.end(), 0.0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)