C++ std::streambuf::p ubseekpos():检查是否支持随机访问

C++ std::streambuf::pubseekpos(): check if random access is supported

提问人:tomoyo255 提问时间:1/13/2021 最后编辑:tomoyo255 更新时间:1/14/2021 访问量:121

问:

在编写引用泛型函数时,我想检查提供的缓冲区是否与支持随机访问的东西相关联,并相应地优化处理,即检查在流中移动是否可用。std::streambufpubseekpos()

我可能在文档中忽略了这一点。你是否碰巧有一个清晰的解决方案,而不是根据后一种方法的结果(如果搜索失败,则返回,这可能有其他原因)来发现它是否有效?-1

可用文档:

提前致谢。问候。


(在第一次评论后编辑 #GIJD)

即使我对此不太高兴,你在这里也有一个很好的观点。与“与其在打开文件之前测试文件是否存在,不如打开文件并处理error_status/异常”(因为测试和打开之间始终可能存在竞争条件)。

好吧,实际的函数调用本身可能确实是某些功能标志存在测试的最佳证明(也可能是错误的设置,即使如果代码经过适当测试,这不太可能......好吧,我只是阅读了我写的东西,是的,好吧,好像代码总是经过适当测试......好哈哈,最好直接测试功能是是)。

但是,-1 返回值可能意味着错误,而不是缺乏随机访问,但有人可能会争辩说结果是相同的,如果它失败,我将无法进行随机访问,无论原因、功能缺乏或某些错误。因此,无论如何,我都必须回退到单通道流读取。

谢谢。问候。


C++ 功能检测 随机访问 Streambuf

评论

0赞 Ted Lyngmo 1/13/2021
pubseekpos调用成员函数。所以我认为如果不进行实际测试,就很难想出一个万无一失的检查。virtual seekpos()
0赞 tomoyo255 1/14/2021
请参阅上面的编辑 #GIJD。
0赞 Ted Lyngmo 1/16/2021
#GIJD 是什么意思?
0赞 tomoyo255 1/30/2021
#GIJD 没有任何意义,它只是一个简短的随机唯一字符串,您可以搜索。对上述文本的排序手册参考/链接。当您无法访问超文本时,这是一种链接到文本的方式,在这样一个类似 wiki 的环境中是一个顶峰:-)如果有办法,我本可以忽略的,我很感兴趣。
0赞 Ted Lyngmo 1/30/2021
明白了。SO 上没有使用这种链接,所以这个问题看起来很奇怪。评论也不应该包含有关问题的重要信息,它们有时会被清理。如果发生这种情况,这将使问题中的链接更加混乱。我建议编辑:-)

答: 暂无答案