gpt4 book ai didi

c++ - 函数重载,无法推导出模板参数

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:18 26 4
gpt4 key购买 nike

我正在尝试重载一个 Sum 函数,它接受一个 [list or vector] 开始和结束迭代器作为参数。这个编译器错误真的让我很困惑。相关代码如下:

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

}

我收到以下编译器错误:

iterators.cpp(72): error C2783: 'const double Sum(const T1::const_iterator &,const T2::const_iterator &)' : could not deduce template argument for 'T1'

iterators.cpp(72): error C2783: 'const double Sum(const T1::const_iterator &,const T2::const_iterator &)' : could not deduce template argument for 'T2'

iterators.cpp(72): error C2780: 'const double Sum(const std::map &)' : expects 1 arguments - 2 provided

iterators.cpp(72): error C2780: 'const double Sum(const T &)' : expects 1 arguments - 2 provided

编译器如何无法识别我正在尝试使用两个输入调用 Sum 函数?我调用函数不正确?

谢谢!

最佳答案

您不需要告诉它迭代器必须是某些类型 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;
}

还有一个标准std::accumulate这样做:

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

关于c++ - 函数重载,无法推导出模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12668766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com