将格式化输出同时写入两个文件

时间:2016-11-30 22:18:45

标签: c++ c++11 polymorphism iostream

对于作业,我必须编写一个提供与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是我不理解的东西,在互联网上搜索解释并没有让它更清晰。

谢谢!

0 个答案:

没有答案