【发布时间】:2013-12-09 08:43:23
【问题描述】:
我正在尝试编写计算两个向量的标量积的函数。 这是代码,它可以工作。
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:非法使用显式模板参数。这看起来很傻,但我不知道应该改变什么来避免这个错误。
【问题讨论】:
-
为什么不使用
std::inner_product?内联循环对您来说如此重要吗? -
@Nim 感谢您的链接 - 它有帮助。
-
@gwiazdorr 实际上,它只是 codereview 任务的一部分,因此它期望使用模板作为内联循环。
-
好吧,您仍然可以为此使用免费功能。看看我的回答。