В этом нет ничего плохого, но это, безусловно, ограничит использование шаблона. Вы не сможете просто поместить итератор, возвращенный чем-то другим или сгенерированный как v.begin()
, так как они будут временными. Сначала вы всегда должны будете сделать локальную копию, что является неким хорошим шаблоном.
Один из способов - перегрузить его:
int parse_integer(input_iterator begin, input_iterator end,
input_iterator &newbegin);
template<typename input_iterator>
int parse_integer(input_iterator begin, input_iterator end) {
return parse_integer(begin, end, begin);
}
Другой вариант - иметь выходной итератор, в который будет записано число:
template<typename input_iterator, typename output_iterator>
input_iterator parse_integer(input_iterator begin, input_iterator end,
output_iterator out);
У вас будет возвращаемое значение для возврата нового входного итератора. И затем вы можете использовать итератор вставки, чтобы поместить проанализированные числа в вектор, или указатель, чтобы поместить их непосредственно в целое число или его массив, если вы уже знаете количество чисел.
int i;
b = parse_integer(b, end, &i);
std::vector<int> numbers;
b = parse_integer(b, end, std::back_inserter(numbers));