es posible tener getline () de aceptar y wistream
Pregunta
Sólo una aclaración, me refiero a la getline mundial () en la clase string.
Lo que quiero hacer es tener algo como esto:
int main()
{
wifstream in(L"textfile.txt");
someFunc(in);
return 0;
}
void someFunc(const wistream& read)
{
wstring buff;
while(getline(read, buff))
{
//do some processing here
}
}
pero me estoy poniendo un:
Error 2 error C2664: 'std::getline' : cannot convert parameter 1 from 'const std::wistream' to 'std::basic_istream<_Elem,_Traits> &'
Para solucionarlo, necesito quitar la const de wistream const y leer. Entiendo por qué ocurre esto, pero es posible configurar getline () para aceptar un wistream lugar sin ningún tipo de conversiones o debería ignorarla y retire la const?
Solución
Lo hace aceptar un wistream, pero getline () exige un argumento que no es constante porque se modifica la corriente. Intente cambiar a:
...
void someFunc(wistream& read)
...
Otros consejos
Los caracteres de lectura de la corriente modifica la corriente. No se pueden marcar la const corriente y esperar que funcione correctamente.
Como regla general,
- Siempre pasan los parámetros de función como referencias
const
- a menos que sean los tipos predefinidos, en cuyo caso se copian (y
const
/ noconst
se convierte en una cuestión de estilo) - a menos que estén destinados a ser cambiado dentro de la función de modo que los cambios reflejan a la persona que llama de, a continuación, se pasan por referencia no
const
- a menos que la función debe ser exigible incluso si las personas que llaman no tienen un objeto para pasar, a continuación, se pasan como punteros (# 1 y # 3 se aplica aquí también)
Streams, sin embargo, son una notable excepción a esta regla, ya que siempre se deben transferir como referencias no const
.