У меня есть следующий небольшой вариационный шаблон, который должен делить серию чисел. Насколько я понимаю, это примерный пример того, что произойдет, если я позвоню divide(20, 2, 2)
->20/ 2/2
. По-видимому, это не так хорошо, так как ответ, который я получаю, составляет 20 ... Он отлично работает, когда есть только два аргумента.Variadic template divider
#include <iostream>
template<class first_t>
auto divide(const first_t &first)
{
return first;
}
template<class first_t, class... rest_t>
double divide(const first_t &first, const rest_t&... rest)
{
return first/divide(rest...);
}
int main()
{
std::cout << divide(20, 2, 2); //should print 5
std::cin.get();
}
Неудивительно, что вы закончите с делением на обратное. 20 делится на 2, деленный на 2 = 20/1 = 20. назовите его на 20, 2, 1, вы получите 10. – SergeyA
вам нужно 'return first/multiply (rest)' –
'((20/2)/2)! = (20/(2/2)). – Jarod42