В общем, нет, нет способа узнать, когда вы нажали последний аргумент, и вам нужно будет предоставить своего рода стража.По этой причине списки аргументов переменной длины небезопасны;нет никакого способа статически проверить, что все аргументы были получены правильно, или что они имеют правильные типы и т. д. Если вы посмотрите на большинство функций varargs, у них всех есть некоторый способ узнать, сколько существует аргументов.printf
и scanf
используют строку форматирования, open
определяет тип операции и т. Д.
Однако в C ++ 0x вы сможете сделать это с помощью std::initializer_list
, которая является более умной, более безопасной для типов альтернативой varargs.Например:
template <class T>
Polynomial<T>::Polynomial(T FirstCoefficient, std::initializer_list<T> coeffs)
{
m_coefficients.insert(m_coefficients.begin(), coeffs.begin(), coeffs.end());
}
Теперь компилятор может проверить тип, что все аргументы имеют тип T
, и сделает всю проверку диапазона за тебя.