c++ - C++ std::streambuf::pubseekpos():检查是否支持随机访问
问题描述
在编写一个引用 an 的通用函数时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/exceptions”相同(因为在测试和打开之间总是可能存在竞争条件)。
好的,实际的函数调用本身可能确实是对某些功能标志存在测试的最佳证明(也可能设置错误,即使代码经过适当测试也不太可能......好吧,我只是读了我写的,是的,好吧,好像代码总是经过适当的测试......好吧哈哈,最好直接测试功能是是的)。
但是,-1 返回值仍然可能意味着错误,而不是缺少随机访问,但有人可能会争辩说结果是一样的,如果它失败,无论出于何种原因,我将无法进行随机访问,缺少功能或一些错误。因此,无论如何,我将不得不退回到单遍流读取。
谢谢。问候。
解决方案
推荐阅读
- python - 将 Python 作为 Windows 服务运行 - 使用模块调用另一个 Python 脚本
- php - mysql使用触发器更新另一个表
- ruby-on-rails - Ransack 中关联模型的访问属性
- c# - 使用依赖注入在工作线程中实例化对象
- arrays - 在 Swift 中对 2 个链接数组进行排序?
- java - 如何为原始 JSON + JSON(B) PostgreSQL 实现 Hibnernate 类型
- azure - 删除后安装不重新安装
- python - Django/Python - views.py 中不需要的实例缓存
- google-spreadsheet-api - 更新范围未知的单元格值(Google SpreadSheets API v4)
- phpunit - 覆盖 PHPUnit 中的 PHPT 测试