(非擴展)操縱器通常只設置提取器後面讀取和響應的標誌和數據。 (這就是xalloc
,iword
和pword
是。)你可以,很明顯,這樣做,是爲了寫東西類似於std::get_money
:
struct uppercasify {
uppercasify(std::string &s) : ref(s) {}
uppercasify(const uppercasify &other) : ref(other.ref) {}
std::string &ref;
}
std::istream &operator>>(std::istream &is, uppercasify uc) { // or &&uc in C++11
is >> uc.ref;
boost::to_upper(uc.ref);
return is;
}
cin >> setw(80) >> uppercasify(mystring);
另外,cin >> uppercase
可以返回引用不cin
,而是一些(模板)包裝類uppercase_istream
的實例化,其相應的過載爲operator>>
。我不認爲有一個操縱器修改底層流緩衝區的內容是一個好主意。
如果你足夠絕望,我想你也可以用imbue
手工製作的語言環境導致大寫字符串。我認爲我不會讓任何類似的東西通過代碼審查 - 它只是在等待驚喜,並咬下代碼的下一個人。
相關但不完全相同:http://stackoverflow.com/questions/1391746/how-to-easily-indent-output-to-ofstream – 2012-04-09 16:51:26