把枚举写到流中是一件别扭的事,因为你需要一个把所有可能的枚举值都转化为字符串的函数。从流中读取枚举甚至更加麻烦——你从流中读出的值可能是无效的。
实际上,把枚举作为整数写到流中是没有什么作用的,因为开发者读取枚举值时,他/她只需知道每个整数值所代表的意思。读取枚举的整数值也没有什么作用。在实际应用中,枚举是通过用户界面读取的,用户更希望使用便于记忆的字符串而不是数字。
当你考虑到所有这些因素时,你就会发现把枚举的值用与它唯一对应的字符串来表示是一种更加切合实际的做法。
你可以在这儿下载Zip文件,你可以从它那里学会一种简单、易用的读/写枚举的办法。下面,我们将向你演示一种读取枚举的类似方法,然后讨论从流中读取枚举可能产生的问题。
当读取枚举时,你可能会遇到如下问题:
举例来说,假定我们有一个枚举,如下所示:
enum ReadType { ReadAsText, ReadAsBinary .. }
在这个枚举中,我们可能会有这样的映射关系:ReadAsText -> "As Text(做为文本)"和ReadAsBinary-> "As Binary(做为二进制数)"
如果遇到第一种情况(即读取的枚举值无效),我们可以抛出一个例外(继承自std::exception)。
在第二种可能情况下——这取决于是否存在某个枚举值对应的字符串包括一个以上单词,我们将提供两个函数:read_enum_as_word和read_enum_as_line(我们将在下面分别介绍这两个函数)。