所以,我一直在尝试更严格地制作任何不应被函数const
触及的传递参数。
我在某些C ++代码中遇到的一种情况是对象可能会发生变化,但我希望“锁定”函数来访问对象的某些关键功能。例如,对于std::ifstream
文件句柄,我可能希望阻止该函数关闭文件。
如果我将其作为const &
传递,则const
部分会阻止我执行标准文件i / o。
e.g。
我想要的东西void GetTags(Arr<std::string> & tags, std::ifstream const& fileHandle)
...但是以允许文件i / o但不打开/关闭操作的方式编写。
在C ++中有没有好的/可靠的方法呢?什么是最佳做法?
答案 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
。