【发布时间】:2010-02-03 11:50:45
【问题描述】:
我想到了一个 C++ 中的小调试内联函数:
void inline debug( int debug_level, ostream& out ) {
if ( debug_level <= verbosity ) {
out.flush();
}
else {
ostream tmp;
tmp << out;
}
}
这是我想如何使用它的示例:
_debug( 7, cout << "Something something" << someint << endl );
但是它不能按我计划的方式工作 - 我希望它仅在详细级别高于或等于传递给函数的调试级别时打印消息,但无论调试级别如何,它似乎每次都会打印,因此数据保留在 cout 缓冲区中。到目前为止,我认为这个函数不是我最近想到的最好的主意,但我仍然想知道是否有办法清除与 cout、cerr 等相关的缓冲区。是否有可能让这种函数正常工作?
【问题讨论】:
-
如果你想走Konrad的路线,使用空流的思想,看看这个问题stackoverflow.com/questions/760301/…
-
哦,我只是不喜欢 oldschool-C 宏,我更喜欢 C++ 方式;)
-
宏在 C++ 中的可避免性与在 C 中差不多。
-
是的,明智地使用宏,但是对于日志记录,它们也可以很好地记录函数/文件/行号。不管你喜不喜欢,他们仍然有自己的位置。