C++标准模板库(STL)提供了一种把对象写到流的绝好方法:你有一个类,要能够将其类型的对象写到流,只用定义操作符<<就行了。但是你很快就会意识到对于任何希望成为产品的东西而言这过于通用了。通常,只有在编写的时候,你才会知道打印你的对象之前应该如何格式化他们。如果你还没有相信的话,看这个例子。
假设你有一个日期/时间类和一个用户友好的应用程序,后者管理着库存的操作。在生成库存操作报告的时候,你想要自定义每次操作发生时间的打印格式:
你的一些客户可能还希望依赖于从前的应用程序,他们的报告使用了一种自定义的时间格式。要让他们能够更容易地使用你的应用程序,你会允许他们使用这种自定义的格式来打印时间。听起来很有趣,是吧?往下看;你会很高兴也很惊奇地发现C++让这个自定义的过程会变得有多么的容易。作为奖励,我会给一个时间格式符,它不仅能完成以上所有的工作,还能做更多。
格式化的概念和处处存在的printf函数背后的概念相类似。你有一个对象和一个格式串。在格式串里,你拥有转义序列(格式符的ID号),它们可以辨认出为这个对象而打印的数据/属性。
让我们来看看格式化对象有多容易:
有一个例子能帮你更好的理解这个过程:
第一步:你有DateTime类。在给定了DateTime对象后,你可以这样编写:
第二步:你导出以上的格式符ID:
第三步:要编写一个像Sun (23:03)这样的时间值,你要使用format_obj(value, “ (:)”)。