C++同时写入 std::out 和 std:clog
C++ writing to std::out and std:clog simultaneously
我想创建一个类似流的类,通过它我可以写入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;
这能做到吗?
我找到了一个(或"the")解决方案!
我添加了以下代码:
Log & operator << (Log & stream, std::ostream & (*f)(std::ostream&))
{
std::cout << f;
std::clog << f;
return stream;
}
这增加了功能以接受例如 std::endl
(或 std::ostream
中的其他函数调用),现在的行为符合预期。
通常不需要手动编写这样的装置来将输出定向到多个位置。
为此使用三通实用程序。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- swig perl typemap(out) std::vector<std::string> 在 perl 中不返回所需的输出
- "friend std::ostream& operator<<(std::ostream& out, LinkedList& list)"是什么意思?
- 尝试同时写入 std:out 和文件
- 错误:非静态引用成员"std::ostream&Student::out",无法使用默认赋值运算符
- c ++如何使我.get() std::future out of a vector.
- 如何在 Linux 中将孩子的进程 std (out / err) 设置为父级
- fstream::open() Unicode 或非 ASCII 字符在 Windows 上不起作用(使用 std::ios::out)
- C++同时写入 std::out 和 std:clog
- Printing out std::map
- 将Std::vector通过ref / out从c#传递到c++
- QTextStream and std out
- 聚合'std::stringstream out'具有不完整的类型,无法定义 [C++]
- 以std:: Fstream::in | std:: Fstream::out | std:: Fstream::app