如何最好地保持关闭文件的功能?

时间:2012-09-05 15:29:18

标签: c++ file-io stl const

所以,我一直在尝试更严格地制作任何不应被函数const触及的传递参数。

我在某些C ++代码中遇到的一种情况是对象可能会发生变化,但我希望“锁定”函数来访问对象的某些关键功能。例如,对于std::ifstream文件句柄,我可能希望阻止该函数关闭文件。

如果我将其作为const &传递,则const部分会阻止我执行标准文件i / o。

e.g。

我想要的东西
void GetTags(Arr<std::string> & tags, std::ifstream const& fileHandle)

...但是以允许文件i / o但不打开/关闭操作的方式编写。

在C ++中有没有好的/可靠的方法呢?什么是最佳做法?

4 个答案:

答案 0 :(得分:6)

标准库设计已经为您完成了这一点:将引用传递给 base std::istream,而不是打开或关闭的概念 - 它暴露了流界面。

void stream_me(std::istream & is);

std::ifstream is("myfile.txt");
stream_me(is);

答案 1 :(得分:1)

在你的位置,我只需传递一个std::istream

答案 2 :(得分:0)

您可以将ifstream包装在一个只暴露您希望调用者能够使用的功能的对象中。

但是,如果你有许多不同的功能,每个功能都有不同的ifstream功能子集,那么你最终会得到许多不同的包装类;所以我不认为这是一般解决方案。

答案 3 :(得分:0)

我认为最好的方法是将ifstream包装在一个新类中,该类只有与您希望GetTags有权访问的功能相对应的成员函数。然后将ifstream作为第二个参数传递给GetTags