有大量信息可用于重载operator<<
以模仿将复杂对象转换为字符串的toString()
样式方法。我对也感兴趣,执行反转,operator>>
将字符串反序列化为对象。安全地重载流操作符>>
通过检查STL
源,我收集的是:
istream &operator>>(istream &, Object &);
将是反序列化Object
类型的对象正确的函数签名。不幸的是,我一直在为如何正确实施这个 - 特别是如何处理错误一直在亏损:
- 如何指示流中的无效数据?抛出异常?
- 如果存在是流中格式不正确的数据流,该数据流应处于什么状态?
- 在返回操作符链接引用之前是否应该重置任何标志?
此外,请确保在尝试做任何事情之前检查“失败”位。如果它已经设置,只需返回流。 – KTC 2009-08-15 01:12:12
感谢您的建议,特别是使用“失败”位而不是例外。除了设置失败位之外,我还必须对流的内容做出任何保证吗?例如,如果我设置了“失败”位,流应该保持不变吗? – 2009-08-15 01:15:45
这就是我本来想说的,但你回答得更快!我想补充一点,正确的答案是通过查找现有的实现来实现的,这就是你所描述的。另外,我会注意到,不存在格式错误的数据,就像读取它的格式错误一样;在这种情况下,您需要确保变量不变,并且(如果您设置了失败位而不是坏位),那么没有字符从流中丢失。 – 2009-08-15 01:17:26