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 ) ;
2 つの質問があります。このコードが Visual Studio 2012 with c++11 でコンパイルされないのはなぜですか? Compiler は、「 'Debug' : is not a member of 'monitor' 」と言います。ここで、Debug は Logger クラスのメソッドです。
Boost ライブラリを使用して C++03 コンパイラで同じ監視テンプレート クラスを実装する方法。