est-il possible d'avoir la fonction getline () acceptent wistream &
Question
Juste pour clarifier, je fais référence à la fonction getline globale () dans la classe de chaîne.
Ce que je veux faire est d'avoir quelque chose comme ceci:
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
}
}
mais je reçois un:
Error 2 error C2664: 'std::getline' : cannot convert parameter 1 from 'const std::wistream' to 'std::basic_istream<_Elem,_Traits> &'
Pour le fixer, je dois retirer le const const wistream & lire. Je comprends pourquoi cela se passe, mais est-il possible de configurer getline () pour accepter un wistream au lieu sans aucune conversion ou devrais-je ignorer et supprimer le const?
La solution
Il accepte les wistream un, mais getline () exige un argument non-const, car il modifie le flux. Essayez de changer à:
...
void someFunc(wistream& read)
...
Autres conseils
caractères de lecture du flux modifie le flux. Vous ne pouvez pas marquer le flux const et attendre à ce que fonctionne correctement.
En règle générale,
- Je passe toujours des paramètres de fonction en tant que références
const
- à moins qu'ils sont intégrés dans les types, auquel cas ils sont copiés (et
const
/ non-const
devient une question de style) - à moins qu'ils sont destinés à être changé à l'intérieur de la fonction afin que les changements reflètent chez l'appelant, puis ils sont passés par référence non
const
- à moins que la fonction doit être appelable même si les appelants ne sont pas un objet pour passer, puis ils sont passés comme des pointeurs (# 1 et # 3 applique ici aussi)
cours d'eau, cependant, sont une exception notable à cette règle, car ils doivent toujours être passés en tant que références non const
.