提问人:tomoyo255 提问时间:1/13/2021 最后编辑:tomoyo255 更新时间:1/14/2021 访问量:121
C++ std::streambuf::p ubseekpos():检查是否支持随机访问
C++ std::streambuf::pubseekpos(): check if random access is supported
问:
在编写引用泛型函数时,我想检查提供的缓冲区是否与支持随机访问的东西相关联,并相应地优化处理,即检查在流中移动是否可用。std::streambuf
pubseekpos()
我可能在文档中忽略了这一点。你是否碰巧有一个清晰的解决方案,而不是根据后一种方法的结果(如果搜索失败,则返回,这可能有其他原因)来发现它是否有效?-1
可用文档:
- https://www.cplusplus.com/reference/streambuf/streambuf/pubseekpos/
- https://en.cppreference.com/w/cpp/io/basic_streambuf/pubseekpos
提前致谢。问候。
(在第一次评论后编辑 #GIJD)
即使我对此不太高兴,你在这里也有一个很好的观点。与“与其在打开文件之前测试文件是否存在,不如打开文件并处理error_status/异常”(因为测试和打开之间始终可能存在竞争条件)。
好吧,实际的函数调用本身可能确实是某些功能标志存在测试的最佳证明(也可能是错误的设置,即使如果代码经过适当测试,这不太可能......好吧,我只是阅读了我写的东西,是的,好吧,好像代码总是经过适当测试......好哈哈,最好直接测试功能是是)。
但是,-1 返回值可能意味着错误,而不是缺乏随机访问,但有人可能会争辩说结果是相同的,如果它失败,我将无法进行随机访问,无论原因、功能缺乏或某些错误。因此,无论如何,我都必须回退到单通道流读取。
谢谢。问候。
答: 暂无答案
评论
pubseekpos
调用成员函数。所以我认为如果不进行实际测试,就很难想出一个万无一失的检查。virtual seekpos()