我是 Boost 的新手,我正在重新设计一个必须在线程应用程序中工作的日志记录类。它被设计为像 ostream 对象一样工作,但“没有工作”(用 Eddy Izzard 的声音说,对于那些知道他提到达芬奇直升机的人来说)。
您可以按如下方式使用它:
Logger &logger = Logger::instance();
logger << "He designed a helicopter you know...that did not work." << endl;
因此,它最初被设计为单例,经过一些方法后,我认为也许 Logger::instance() 可以返回线程唯一的 Logger。我可能会使用 STL 来定义 Boost Thread ID 和 Logger 类的实例之间的映射。
然后我开始想,也许有一种更聪明的方法可以使用某种形式的线程本地存储来做到这一点?
地图的一个问题是,当线程终止时,我必须进行一些房屋清洁以定期删除 Logger。我开始觉得我在重新发明一些东西。
我看到 Boost 支持线程本地存储。
有什么想法或警告吗?
谢谢,
肯尼