[英]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.