如何最好地防止功能关闭文件
How Best to Keep Function From Closing File?
所以,我一直在尝试更严格地制作任何不应被函数const
触及的传递参数。
我在一些C++代码中遇到的一种情况是对象可能会更改,但我想"锁定"函数,使其无法访问对象的某些关键功能。 例如,对于std::ifstream
文件句柄,我可能希望阻止函数关闭文件。
如果我将其作为const &
传递,const
部分似乎使我无法执行标准文件 I/O。
例如,我想要类似的东西
void GetTags(Arr<std::string> & tags, std::ifstream const& fileHandle)
。但以允许文件 I/O 但不允许打开/关闭操作的方式编写。
C++有什么好/可靠的方法可以做到这一点吗? 什么才算是最佳做法?
标准库设计已经为您完成了此操作: 改为传递对基类的引用std::istream
,它没有打开或关闭的概念 - 它只公开流接口。
void stream_me(std::istream & is);
std::ifstream is("myfile.txt");
stream_me(is);
在你的位置上,我只是通过一个std::istream
。
您可以将 ifstream 包装在一个对象中,该对象仅公开您希望调用方能够使用的功能。
但是,如果你有一堆不同的函数,每个函数都有不同的 ifstream 功能子集,你最终会得到许多不同的包装类;所以我不认为这是一个通用的解决方案。
我认为最好的方法是将ifstream
包装在一个新类中,该类仅具有与您希望GetTags
有权访问的功能相对应的成员函数。 然后将不是ifstream
作为第二个参数传递给GetTags
。
相关文章:
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 两个文件使用彼此的功能-如何解决
- 文件系统:复制功能的速度秘诀是什么
- C++读取功能改进,使读取多个文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- "configure"脚本如何检测我的系统是否支持某些头文件或 cpp 功能?
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 如何从主.cpp中的cpp文件中获取功能结果?
- 如果在VC6中使用打开功能,如何选择文件夹?
- 如何在cmake工具链文件中设置编译功能,以便已知的自定义编译器使用target_compile_features
- 是否有一个Windows驱动程序函数可以执行Windows文件api SeFileAttributes的等效功能
- 如何使用C++在sqlite3数据库中执行写文件功能
- 打开文件并输出功能
- 用户使用C++中的删除功能删除文件
- C 从文件功能读取循环时无法退出
- 使用创建文件功能创建文件会导致写保护文件
- 执行两次写入文件功能
- QT复制文件功能错误
- winbio.h头文件功能被禁用