我正在尝试找到一种方法来获取读取或写入流的字符数,即使存在错误并且读/写结束时间较短,该方法也是可靠的。
我正在做这样的事情:
return stream.rdbuf()->sputn(buffer, buffer_size);
但如果streambuf实现overflow
允许抛出这样的期望:这是行不通的。是吗?我无法在任何地方找到它的记录。
basic_streambuf::overflow
允许在失败时抛出异常,如中所述27.6.3.4.5/6,遗憾的是没有办法确保编译时该函数永远不会抛出异常。
看来你的运气已经不够了,唯一能百分百确定的方法就是overflow
不会抛出异常就是编写你自己的streambuf
只是在失败时不会这样做。
[27.6.3.4.5/2-3] int_type overflow(int_type = c = traits::eof ())
...
[27.6.3.4.5/5]
Requires:该虚函数的每个重写定义都应遵守以下约束:
1) 消耗一个字符对相关输出的影响
指定序列309
2) 设 r 为待处理序列中的字符数,而不是
消耗了。如果 r 非零,则 pbase() 和 pptr() 应设置为
即: pptr() - pbase()
== r 和从 pbase() 开始的 r 字符是关联的输出流。如果 r 为零(待处理的所有字符
序列已被消耗)然后将 pbase() 设置为 NULL,或者
pbase() 和 pptr() 都设置为相同的 NULL 非值。
3) 如果将一些字符附加到
关联的输出流失败或者无法建立 pbase()
和 pptr() 根据上述规则。
[27.6.3.4.5/6]
Returns: traits::eof ()
or 如果函数失败则抛出异常
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)