He escrito un par de funciones con un prototipo de esta manera:¿Qué hay de malo en pasar el iterador de C++ por referencia?
template <typename input_iterator>
int parse_integer(input_iterator &begin, input_iterator end);
La idea es que la persona que llama proporcionaría un rango de caracteres, y la función interpretaría los personajes como un valor entero y devolverlo, dejando comenzar en un pasado el último personaje utilizado. Por ejemplo:
std::string sample_text("123 foo bar");
std::string::const_iterator p(sample_text.begin());
std::string::const_iterator end(sample_text.end());
int i = parse_integer(p, end);
Esto dejaría i
conjunto a 123 y p
"señalador" en el espacio antes de foo
.
Me han dicho (sin explicación) que está mal pasar un iterador por referencia. ¿Es mala forma? Si es así, ¿por qué?
"No podrá simplemente poner un iterador devuelto por otra cosa o generado como v.begin(), ya que esos serán temporales." Para eso son las referencias de C++ 0x rvalue. :) – Zifre
Me gusta la idea del iterador de salida es muy stl-esque – iain
Otra alternativa (para los lectores tardíos): return an :: std :: pair, análogamente a :: std :: map :: insert does . –
Aconcagua