我希望得到一个C ++类Xyz
,如下所示:
Xyz mything("/tmp/x1");
int main(int argc, char **argv) {
mything << "Hello world";
}
导致创建文件“/ tmp / x1”,以及
2013-12-04 12:01 :: Hello world
写给它。
我遇到的第一个问题是,ostream
针对<<
之后的每种类型都有许多专门的方法。第二个是如果我有
cout << "hello" << "world";
和
cout << "hello";
然后operator <<
调用"hello"
的实现需要知道语句中是否有任何内容(如何有效地执行if(last_in_line_of_<<)
类型构造?)。
标准cout
通过使用endl
等对象来实现此目的。
基本上我想在定义类之后用一行创建一个全局日志对象,并用ostream
操作写入它,这样就可以使用cout
作为字符串get将被包裹在一个更大的字符串中。
我最终看到了这种做法,因为varargs
方式很痛苦,很多人似乎都反对它。
在Python和Ruby等脚本语言中,对象有str
或to_s
方法(或等效方法),print
和format
调用它们来格式化它们,以便"hello {} world".format(x)
格式化一个参数,"hello {} world".format(" ".join(x))
在格式化为字符串后使用空格连接列表,然后将其粘贴到结果字符串中。
我想知道正确的C ++方法是做什么的。
答案 0 :(得分:1)
Instad给予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 (如类型outfile
的{{1}}变量)所取代,你会得到完全相同的效果,但是使用的是一个可以操作的操纵器使用任何类型的输出流(不一定是文件)
std::filestream
答案 1 :(得分:0)
要了解如何格式化输出,请参阅cplusplus.com iomanip中的Standard C++ Library reference。
例如: