我重載operator<<
這樣的:如何避免在重用std :: stringstream變量時使用std :: stringstream.str()和std :: stringstream.clear()?
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;
}
現在我使用googletest測試operator<<
超載這樣的:
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
現在的問題是,每次我添加一個新的測試我需要在測試之前增加ss.str("");ss.clear();
,顯然空流和明確錯誤狀態。這個重複調用兩個std::stringstream
函數讓我覺得我做錯了什麼。
因此,我主要是需要幫助:
- 如何重用
std::stringstream
變量「SS」無連連OR - 最好的選擇調用
ss.str("");ss.clear();
使用googletest實現重載operator<<
測試。
您不需要同時調用str()和clear()。這兩個調用都做同樣的事情。或者另一個就足夠你想要做的事情。我不認爲使用單獨的stringstream變量會爲您的代碼帶來任何可讀性。使用str(「」)或clear()(我的個人選擇)使yuour的意圖非常清晰,並且從零開始創建新的stringstream會更有效率。 –
@MichaëlRoy[Here](https://stackoverflow.com/questions/12112259/how-to-reuse-stringstream)接受的答案表示,即使在調用str(「」)之後仍然需要調用clear()。對我來說,只使用str(「」)工作得很好。 – MasterJEET
@MichaëlRoy同樣只使用'clear()'不起作用。 – MasterJEET