c++ 如何着色std::cout的输出流,而不是std::cerr和std::clog的输出流?

hts6caw3  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(176)

我正在处理以下问题:我在Ubuntu上,如果我把所有的流都涂成红色,例如使用下面的命令:

#include <iostream>

std::cout << "\033[31m" << "From now on the stream is red!";

所发生的情况是,从现在起,不仅std::cout对象,而且std::cerrstd::clog对象也将显示红色字符串。
我想知道是否有办法只着色std::cout输出,并让std::cerrstd::clog输出不变,在某种程度上能够做到:

#include <iostream>

std::cout << "\033[31m" << "From now on the std::cout stream is red!"; // red stream
std::cerr << "This stream is NOT red"; // normal stream (not colored)
std::clog << "This stream is NOT red"; // normal stream (not colored)

我需要的是一个“设置”(函数,类等)能够在程序开始时修复这个需求,并让它不变,直到结束。
我该怎么做呢?

i7uq4tfw

i7uq4tfw1#

经过几天的尝试,我找到了一个非常适合这个问题的解决方案,我只是创建了一个能够直接将更改应用到std::ostream对象的函子,以如下方式使用:

functor( std::cout ) << "Modified output stream";

这样的实现有点长,可以在here中找到。

相关问题