如何最好地防止功能关闭文件

How Best to Keep Function From Closing File?

本文关键字:文件 功能 何最好      更新时间:2023-10-16

所以,我一直在尝试更严格地制作任何不应被函数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