有没有办法打开/关闭std:cerr(或等效功能)?

use*_*112 1 c++ visual-studio visual-studio-2012

不使用成熟的日志库(或IF语句)-C ++中是否有一种方法有时可以将消息输出到控制台,有时却不可以?

我正在使用std::cerr,有什么方法可以控制何时输出?

理想情况下,我可以拥有:

std::cerr << "Constructor called" << endl;
Run Code Online (Sandbox Code Playgroud)

并有启用/禁用此行代码的方法?

jxh*_*jxh 5

我不确定“不带if”的意思,但是您可以不用if自己编写代码。宏可以为您检查标志。

#define CERR if (cerr_disabled) {} else std::cerr
bool cerr_disabled = false;
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码中:

CERR << "error message" << std::endl;
Run Code Online (Sandbox Code Playgroud)

如果cerr_disabled为true,则不打印任何内容。

这种宏方法的优点是,如果禁用err日志记录,则不会评估任何打印参数。例如,如果您需要调用一个函数来创建更复杂的日志字符串:

std::string fancy_log_message () {
    //...
}

CERR << fancy_log_message();
Run Code Online (Sandbox Code Playgroud)

如果cerr_disabled为true,fancy_log_message()则不调用。仅抑制流对象本身是无法实现的。