[英]C++ ostream formatting
我想要一個C ++類Xyz
,如下所示:
Xyz mything("/tmp/x1");
int main(int argc, char **argv) {
mything << "Hello world";
}
導致創建文件“ / tmp / x1”,然后執行以下操作
2013-12-04 12:01 ::你好世界
寫給它。
我遇到的第一個問題是ostream
對於每種可能在<<
類型都有很多專門的方法。 第二個是如果我有
cout << "hello" << "world";
和
cout << "hello";
那么operator <<
的實現被稱為"hello"
需要知道語句中是否有任何內容(我該如何有效地進行if(last_in_line_of_<<)
類型的構造?)。 標准cout
通過具有endl
對象來實現此目的。
基本上,一旦定義了類,我想用一行創建一個全局日志對象,並使用ostream
操作對其進行寫入,以便將cout
得到的字符串包裹在一個較大的字符串中。
由於varargs
方法很痛苦,而且很多人似乎都建議不要這樣做,所以我最終還是考慮采用這種方法。
在像Python和Ruby這樣的腳本語言中,對象具有str
或to_s
方法(或等效方法),並對其進行print
和format
以對其進行格式化,從而使"hello {} world".format(x)
格式化一個參數,而"hello {} world".format(" ".join(x))
在格式化為字符串后,使用空格加入列表,然后將其"hello {} world".format(" ".join(x))
到結果字符串中。
我想知道什么是正確的C ++方法。
可以向Xyz
提供流行為,使其成為操縱器並使用常規流功能:
原型為
std::ostream& logtime(std::ostream& s)
{
/* write date and time to s */
return s;
}
可以用作
std::cout << logtime << "text and other things" << std::endl;
如果將std :: cout替換為其他任何ostream (例如,類型為std::filestream
的outfile
變量),則您將獲得完全相同的效果,但使用的操縱器可以處理任何類型的輸出流(不一定是文件)
std::ofstream outfile("file");
outfile << logtime << "text and whatever else" << std::endl;
要了解如何格式化輸出 ,請參閱cplusplus.com上“ 標准C ++庫”參考中的iomanip。
例如:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.