spdlog 类图
代码中有趣的小设计:
1.synchronous_factory 和 async_factory_impl 用了C++11 的可变参数函数模版,解决了传统工厂方法模式两个缺点:
a.加个新类型的对象,对应要加个工厂子类
b.工厂创建的子类们的参数要一样
2.base_sink 类的log和flush 方法用了final后明确了sink系列的flush和log方法用的是NVI(non-virtual-interface)手法。
在《effective C++》中建议该手法用在明确"事前工作"和"事后工作",这块加锁解锁就是"事前工作"