从流中读写枚举

ZDNet软件频道 时间:2002-11-25 作者:BUILDER.COM |  我要评论()
本文关键词:
把枚举写到流中是一件别扭的事,因为你需要一个把所有可能的枚举值都转化为字符串的函数。下面,我们将向你演示一种读取枚举的类似方法,然后讨论从流中读取枚举可能产生的问题。

把枚举写到流中是一件别扭的事,因为你需要一个把所有可能的枚举值都转化为字符串的函数。从流中读取枚举甚至更加麻烦——你从流中读出的值可能是无效的。

实际上,把枚举作为整数写到流中是没有什么作用的,因为开发者读取枚举值时,他/她只需知道每个整数值所代表的意思。读取枚举的整数值也没有什么作用。在实际应用中,枚举是通过用户界面读取的,用户更希望使用便于记忆的字符串而不是数字。

当你考虑到所有这些因素时,你就会发现把枚举的值用与它唯一对应的字符串来表示是一种更加切合实际的做法。

你可以在这儿下载Zip文件,你可以从它那里学会一种简单、易用的读/写枚举的办法。下面,我们将向你演示一种读取枚举的类似方法,然后讨论从流中读取枚举可能产生的问题。

当读取枚举时,你可能会遇到如下问题:

  • 你可能读到一个无效值。
  • 有的枚举值所对应的字符串的长度可能超过一个单词。

举例来说,假定我们有一个枚举,如下所示:

enum ReadType
{
ReadAsText,
ReadAsBinary
..
}  

在这个枚举中,我们可能会有这样的映射关系:ReadAsText -> "As Text(做为文本)"和ReadAsBinary-> "As Binary(做为二进制数)"

如果遇到第一种情况(即读取的枚举值无效),我们可以抛出一个例外(继承自std::exception)。

在第二种可能情况下——这取决于是否存在某个枚举值对应的字符串包括一个以上单词,我们将提供两个函数:read_enum_as_word和read_enum_as_line(我们将在下面分别介绍这两个函数)。


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