Код: Выделить всё
#include
#include
double xfun (double)
{
return 0.0;
}
template
double xfun (double p, int t, int ex, int...)
{
return t * pow (p, ex) + xfun (p, xs...);
}
int main ()
{
// Expecting 0.0234
printf ("x = %f\n", xfun (0.1, 2,2, 3,3, 4,4));
// Expecting 0.56
printf ("x = %f\n", xfun (0.1, 5,1, 6,2));
}
Я пробовал следовать примерам на cppreference.com: Packet Pack , в частности последнему, который делает подобные вещи. Хотя во всех примерах используются шаблонные типы, тогда как в моем примере все типы являются int, и я не уверен, что xfun вообще должен быть шаблоном, поскольку он не имеет ни типов в качестве аргумента шаблона, ни значений int в качестве аргументов шаблона.
Целью функции является вычисление
Код: Выделить всё
xfun = \sum_{k=1}^n t_k * p^{ex_k}

где n известно во время компиляции.
Изменить: Самое близкое к рабочему решению, которое я смог найти, это
Код: Выделить всё
template
double xfun (double p, T t, T ex, Ints... ints)
{
return t * pow (p, ex) + xfun (p, ints...);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -arguments
Мобильная версия