C ++同时写入std :: out和std:clog

时间:2014-11-17 11:45:34

标签: c++ cout ofstream clog

我想创建一个类似于流的类,通过它我可以写std::outstd::clog

我有以下代码,但问题是它只写入std::clog,而控制台上的输出不符合预期(奇怪的是,它会覆盖自己)。

struct Log : public std::ofstream
{
    Log(const std::string filename)
    : std::ofstream(filename.c_str())
    {
        std::clog.rdbuf(this->rdbuf());
    }
};

template <typename T>
Log & operator << (Log & stream, const T & x)
{
    std::cout << x;
    std::clog << x;
    return stream;
};

我想要的是这个

Log log("logfile.txt");
log << "this should go to the console and the logfile" << 1234 << std::endl;

可以这样做吗?

2 个答案:

答案 0 :(得分:1)

我找到了一个(或&#34;&#34;)解决方案!

我添加了以下代码:

Log & operator << (Log & stream, std::ostream & (*f)(std::ostream&))
{
    std::cout << f;
    std::clog << f;
    return stream;
}

这增加了接受例如std::endl(或std::ostream内的其他函数调用),现在按预期运行。

答案 1 :(得分:0)

通常无需手动编码这样的装置来将输出定向到多个地方。

使用tee实用程序。