及时格式化C++对象

ZDNet软件频道 时间:2002-11-19 作者:BUILDER.COM |  我要评论()
本文关键词:
使用对象格式符可以让你的应用程序对用户更加友好。编写信息将会是更加直截了当的,而且代码将变得更加清晰,也更容易维护。

C++标准模板库(STL)提供了一种把对象写到流的绝好方法:你有一个类,要能够将其类型的对象写到流,只用定义操作符<<就行了。但是你很快就会意识到对于任何希望成为产品的东西而言这过于通用了。通常,只有在编写的时候,你才会知道打印你的对象之前应该如何格式化他们。如果你还没有相信的话,看这个例子。

假设你有一个日期/时间类和一个用户友好的应用程序,后者管理着库存的操作。在生成库存操作报告的时候,你想要自定义每次操作发生时间的打印格式:

  • 对于前一周的报告,你想像Sun, 23:03这样写时间。
  • 对于年度报告,你想像Sun/15 Sep 2002.这样写时间。
  • 对于短期报告,你想像Sunday/15 Sep 02 (23:03)这样使用。

你的一些客户可能还希望依赖于从前的应用程序,他们的报告使用了一种自定义的时间格式。要让他们能够更容易地使用你的应用程序,你会允许他们使用这种自定义的格式来打印时间。听起来很有趣,是吧?往下看;你会很高兴也很惊奇地发现C++让这个自定义的过程会变得有多么的容易。作为奖励,我会给一个时间格式符,它不仅能完成以上所有的工作,还能做更多。

格式化你的对象

格式化的概念和处处存在的printf函数背后的概念相类似。你有一个对象和一个格式串。在格式串里,你拥有转义序列(格式符的ID号),它们可以辨认出为这个对象而打印的数据/属性。

让我们来看看格式化对象有多容易:

  • 你有一个类,并需要格式化其类型的一个对象,所以你必须使用一个格式符。
  • 格式符需要知道能够为这个类而被打印的数据/属性是什么。
  • 你使用宏来“导出”你的类能打印的数据/属性。一个独特的字符串(格式符的ID)能辨别你导出的每一个数据/属性。如果有使用过动态模板库/微软基础类和动态模板库(ATL/MFC)的经验,你就已经能够适应于MESSAGE_MAP宏了。导出data/properties和这是很类似。
  • 在想要编写类的对象时,你调用格式符,传递要编写的对象和一个格式串,后者包含着嵌入的格式符ID。每个格式符ID(辨别要编写的数据/属性)都是被{ and }包围着。

有一个例子能帮你更好的理解这个过程:

第一步:你有DateTime类。在给定了DateTime对象后,你可以这样编写:

  • 每月的天(1-31),每年的天(1-365),每周的天(Mon-Sun)
  • 星期
  • 小时(0-23),小时(1-12),分钟,秒,AM/PM后缀等等。

第二步:你导出以上的格式符ID:

  • “DD”(每月的天),“day_idx”(每年的天)
  • “weekday”(每周的天)
  • “hh”(小时,0-23),“hh12”(Hour,1-12)
  • “mm”(分钟),“ss”(秒),“ampm”(AM/PM),等等。

第三步:要编写一个像Sun (23:03)这样的时间值,你要使用format_obj(value, “ (:)”)。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134