对于作业,我必须编写一个提供与ostream相同功能的类,但同时输出到两个文件。
目前我有以下代码(为了简洁而在课堂上实现):
#ifndef BISTREAM_H_
#define BISTREAM_H_
#include <iostream>
#include <fstream>
class BiStream : public std::ostream
{
std::ofstream d_firstFile;
std::ofstream d_secondFile;
public:
BiStream(std::ofstream& one, std::ofstream& two)
:
d_firstFile(std::move(one)),
d_secondFile(std::move(two))
{}
friend BiStream& operator<<(BiStream& out, char const *txt)
{
out.d_firstFile << txt;
out.d_secondFile << txt;
return out;
}
};
#endif
然后我可以通过以下方式使用它:
#include "bistream.h"
using namespace std;
int main()
{
ofstream one("one");
ofstream two("two");
BiStream ms(one, two);
ms << "Hello World" << endl; // Write to files and flush stream
}
如果我运行生成的程序,它会正确地向两个文件打印“Hello World”,但不会向这两个文件添加换行符。
此外,声明(当然包括iomanip之后)
ms << std::hex << 5 << '\n';
导致文件中没有打印文本。作为最后一个例子:
ms << "test" <<"Hello World" << endl;
仅对文件打印“test”。这一切都意味着我的重载插入操作符只将第一个参数写入文件...
解决此问题的最佳方法是什么?这个练习提示继承自std :: streambuf的第二个类,但std :: streambuf是我不理解的东西,在互联网上搜索解释并没有让它更清晰。
谢谢!