use*_*112 1 c++ visual-studio visual-studio-2012
不使用成熟的日志库(或IF语句)-C ++中是否有一种方法有时可以将消息输出到控制台,有时却不可以?
我正在使用std::cerr,有什么方法可以控制何时输出?
理想情况下,我可以拥有:
std::cerr << "Constructor called" << endl;
Run Code Online (Sandbox Code Playgroud)
并有启用/禁用此行代码的方法?
我不确定“不带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()则不调用。仅抑制流对象本身是无法实现的。
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |