我正在尝试编写用于计算两个向量的标量积的函数。 这是代码,它的工作原理。具有多种类型的递归模板函数
template <int N>
int scalar_product (std::vector<int>::iterator a,
std::vector<int>::iterator b) {
return (*a) * (*b) + scalar_product<N - 1>(a + 1, b + 1);
}
template <>
int scalar_product<0>(std::vector<int>::iterator a,
std::vector<int>::iterator b) {
return 0;
}
但现在的问题是 - 我要取代这个迭代器与模板类型,这样的功能签名看起来水木清华这样
template <typename Iterator ,int N>
int scalar_product (Iterator a, Iterator b) {
return (*a) * (*b) + scalar_product<N - 1>(a + 1, b + 1);
}
template <typename Iterator>
int scalar_product<0>(Iterator a,
Iterator b) {
return 0;
}
但是,这并不工作 - 我得到编译错误C2768:非法使用显式模板参数。这似乎很愚蠢,但我无法找出我应该改变什么来避免这个错误。
看到这个:http://stackoverflow.com/questions/3716799/partial-specialization-函数功能模板 – Nim
为什么不使用['std :: inner_product'](http://en.cppreference.com/w/cpp/algorithm/inner_product)?内联循环对你如此重要? – gwiazdorrr
@Nim感谢您的链接 - 它帮助。 – htzfun