Herb Sutter 在“C++ and Beyond 2012: Herb Sutter - C++ Concurrency”中描述了模板 Monitor 类的实现:
template<class T> class monitor {
private:
mutable T t;
mutable std::mutex m;
public:
monitor( T t_ ) : t( t_ ) { }
template<typename F>
auto operator()( F f ) const -> decltype(f(t))
{ std::lock_guard<mutex> hold{m}; return f(t); }
};
我正在尝试包装我现有的类 Logger:
Logger logger;
monitor< Logger > synchronizedLogger( logger ) ;
我有两个问题。为什么这段代码不能在 Visual Studio 2012 中用 c++11 编译?编译器说“'Debug' : is not a member of 'monitor'”,其中 Debug 是 Logger 类的方法。
如何使用 Boost 库与 C++03 编译器实现相同的监视器模板类。