ano*_*non 20 c++ logging thread-safety ostringstream
my_macro << 1 << "hello world" << blah->getValue() << std::endl;
Run Code Online (Sandbox Code Playgroud)
应该扩展到:
std::ostringstream oss;
oss << 1 << "hello world" << blah->getValue() << std::endl;
ThreadSafeLogging(oss.str());
Run Code Online (Sandbox Code Playgroud)
Nic*_*lás 73
#define my_macro my_stream()
class my_stream: public std::ostringstream {
public:
my_stream() {}
~my_stream() {
ThreadSafeLogging(this->str());
}
};
int main() {
my_macro << 1 << "hello world" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
my_stream创建一个临时类型,它是一个子类ostringstream.对临时工作的所有操作都是如此ostringstream.
当语句结束时(即,在main()中的整个打印操作的分号之后),临时对象超出范围并被销毁.在my_stream析构函数调用ThreadSafeLogging为"收集"以前的数据.
经过测试(g ++).
感谢/感谢dingo指出如何简化整个事情,所以我不需要重载operator<<.太糟糕的upvotes无法分享.