我开发了一个内部使用Boost.IOStreams的库。最近,我用file_descriptor_sink
打了一个有趣的角落案例。看起来好像在做
file_descriptor_sink s("");
或
file_descriptor_sink s;
s.open("");
完全有效,之后s.is_open()
肯定会返回true
。对我来说,这完全是胡说八道。那是什么文件打开?
这方面有两个问题:
我可以使用任何功能来检测这种情况吗?详细说明,当我第一次遇到这个案例时,我立即回忆起以下情况:
ofstream ofs("");
assert(!ofs);
assert(!ofs.is_open());
assert(ofs.fail());
在file_descriptor_sink
和is_open
方面与fail
行为完全相反的内容甚至无法获得。否则,我必须在构造file_descriptor_sink
之前直接测试空字符串(路径名),以便跟踪这种情况。
你是否同意在这种情况下向图书馆用户抛出精心打造的例外是个好主意?我在考虑使用std::system_error
错误代码的bad_file_descriptor
。