İki vektör için skaler ürünü sayan işlevi yazmaya çalışıyorum. İşte kod ve çalışır.Birden çok türdeki yinelemeli şablon işlevi
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;
}
Ama burada sorun - ı derlemek olsun - İşlevin bu imza bu
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;
}
gibi yetiremediğin bakacağız Ama bu işe yaramazsa yüzden, şablon türü ile bu yineleyicinızı değiştirmek istiyor hata C2768: açık şablon bağımsız değişkenlerinin yasa dışı kullanımı. Aptalca görünüyor, ama bu hatayı önlemek için neyi değiştirmeliydim.
bakınız: http://stackoverflow.com/questions/3716799/partial-specialization- of-function-templates – Nim
Neden ['std :: inner_product'] (http://en.cppreference.com/w/cpp/algorithm/inner_product) kullanılmıyor? Döngüyü dizginlemek senin için çok önemli mi? – gwiazdorrr
@Nim Bağlantı için teşekkürler - yardımcı oldu. – htzfun