Je suis surchargée operator<<
comme ceci:Comment éviter l'utilisation de std :: stringstream.str() et de std :: stringstream.clear() en réutilisant la variable std :: stringstream?
std::ostream& operator<<(std::ostream& os, SomeClass C){
//SomeClass is the class to be represented with operator overloading
os << "{ ";
os << C.getPropertyA() << " ";
os << C.getPropertyB() << " }";
//getPropertyA(), getPropertyB():functions of 'SomeClass' that return std::string
return os;
}
Maintenant, je suis en utilisant googletest pour tester operator<<
surcharge comme ceci:
SomeClass C1;
SomeClass C2;
.
.
std::stringstream ss;
std::string str;
//First test
ss << C1;
std::getline(ss, str);
EXPECT_EQ("<some expected value>", str); // googletest test
//Second test
ss.str("");ss.clear(); //Mandatory if 'ss' need to be reused
ss << C2;
std::getline(ss, str);
EXPECT_EQ("<some expected value>", str); // googletest test
.
.
//Some more use 'ss' follows
Maintenant, le problème est à chaque fois que j'ajouter un nouveau test I besoin d'ajouter ss.str("");ss.clear();
avant le test, apparemment vide flux et effacer état d'erreur. Cet appel répété de deux fonctions std::stringstream
me fait penser que je fais quelque chose de mal.
D'où j'ai besoin d'aide principalement:
- Comment réutiliser la variable
std::stringstream
'ss' sans appelerss.str("");ss.clear();
encore et encore OU - meilleure alternative à la mise en œuvre test pour
operator<<
surchargé en utilisant googletest.
Vous n'avez pas besoin d'appeler les deux str() et clair(). Les deux appels font la même chose. Ou l'autre est suffisant pour ce que vous voulez faire. Je ne pense pas que l'utilisation d'une variable stringstream séparée apportera de la lisibilité à votre code. en utilisant soit str ("") ou clear() (mon choix personnel) rend votre intention assez claire, et est plus efficace que de créer un nouveau strings à partir de zéro. –
@ MichaëlRoy [ici] (https://stackoverflow.com/questions/12112259/how-to-reuse-stringstream) la réponse acceptée indique qu'il est nécessaire d'appeler clear() même après avoir appelé str (""). Pour moi en utilisant seulement str ("") fonctionne bien cependant. – MasterJEET
@ MichaëlRoy L'utilisation de 'clear()' ne fonctionne pas non plus. – MasterJEET