Я пытаюсь написать функцию, которая принимает несколько аргументов разных типов данных и возвращает сумму чисел. Он должен иметь возможность решить, какой тип данных будет использоваться для суммы. Напр. если я напишу add (3,1,2,3), он должен вернуть сумму как int. Однако, если я напишу add (3,1,2,5,3,25), он должен вернуть сумму как двойную.Добавление переменного числа чисел
Я пробовал использовать шаблон, но давал ошибку времени компиляции. Вот функция
template <typename T>
T add(int n, ...)
{
T sum = 0;
va_list vl;
va_start(vl,n);
for(int i=0;i<n;i++)
{
sum += va_arg(vl,T);
}
va_end(vl);
return sum;
}
int main()
{
std::cout<<add(3,1,2,3);
return 0;
}
Compile Error: нет соответствия функции для вызова 'добавить (интермедиат, Int, Int, Int). Я думаю, что ошибка идет, потому что я прошел в va_arg T, но я не знаю, что еще передать, чтобы она была обобщена.
Почему вы не используете [Шаблоны Varidaic] (http: // www.cplusplus.com/articles/EhvU7k9E/)? –
Это решение проблемы, когда переданные аргументы являются целыми числами, но при передаче двойных значений он дает неверный ответ. –
@ DarshilBabel нет, он работает. [** См. Его в прямом эфире **] (http://ideone.com/ggLxjO) – WhozCraig