我想创建一个类似流的类,通过它我可以同时写入std::out和std::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;这可以做到吗?
发布于 2014-11-17 21:19:36
我找到了一个(或“那个”)解决方案!
我添加了以下代码:
Log & operator << (Log & stream, std::ostream & (*f)(std::ostream&))
{
std::cout << f;
std::clog << f;
return stream;
}这添加了接受例如std::endl (或std::ostream中的其他函数调用)的功能,它现在的行为与预期一样。
发布于 2014-11-17 19:49:29
通常不需要手动编写这样的装置来将输出定向到多个位置。
为此,请使用tee实用程序。
https://stackoverflow.com/questions/26971989
复制相似问题