Próbuję napisać funkcję, która zlicza produkt skalarny dla dwóch wektorów. Oto kod i to działa.Funkcja szablonu rekursywnego z wieloma typami
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;
}
Ale tutaj jest problem - chcę zastąpić ten iteratory z typu szablonu tak, że podpis funkcji będzie wyglądać smth jak ten
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;
}
Ale to nie działa - mogę skompilować błąd C2768: nielegalne użycie jawnych argumentów szablonu. Wydaje się to głupie, ale nie mogłem się dowiedzieć, co powinienem zmienić, aby uniknąć tego błędu.
zobaczyć to: http://stackoverflow.com/questions/3716799/partial-specialization- of-function-templates – Nim
Dlaczego nie używać ['std :: inner_product'] (http://en.cppreference.com/w/cpp/algorithm/inner_product)? Czy twoja pętla jest dla ciebie tak ważna? – gwiazdorrr
@Nim Dzięki za link - pomógł. – htzfun