我想重载operator<<将对象序列化为文件(追加)。我应该使用哪个流? ofstream
或fstream
?有什么区别?
std::ofstream& operator<<(std::ofstream& ofs, const MyData&);
std::fstream& operator<<(std::fstream& fs, const MyData&)
由于 千斤顶
答案 0 :(得分:15)
你应该为ostream重载运算符,然后你可以自然地使用它来源于任何类的实例 - ofstream,fstream(继承自iostream,继承自istream和ostream),ostringstream和stringstream(继承也是iostream)
std::ostream& operator<<(std::ostream& os, const MyData&);
答案 1 :(得分:1)
为std::ostream
重载更有意义。如果可以更一般地将实现限制为特殊类型的输出流,为什么?您还可以将序列化打印到std::cout
,这简化了调试。
给出了关于iostream关系和继承用法的一个很好的概述here。此外,每个特定流的概述页面都显示了继承关系。
答案 2 :(得分:0)
AFAIK,ofstream("file.txt")
与fstream("file.txt", ios::out)
相同。
答案 3 :(得分:0)
如果您还想阅读同一文件,请使用fstream
。如果仅附加,请使用ofstream
。在任何一种情况下,如果您不想覆盖现有数据,请在打开时使用ios::app
标志。