Herb Sutter opisuje wdrożenie szablonu klasy monitora w "C++ and Beyond 2012: Herb Sutter - C++ współbieżność":Monitorowanie implementacji klasy <T> w językach C++ 11 i C++ 03?
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); }
};
Usiłuję zawinąć moja istniejącej klasy Rejestrator:
Logger logger;
monitor<Logger> synchronizedLogger(logger) ;
mam dwa pytania. Dlaczego ten kod nie kompiluje się w Visual Studio 2012 z C++ 11? Kompilator mówi, że "Debuguj": nie jest członkiem "monitora", gdzie Debug jest metodą klasy Logger.
Jak zaimplementować tę samą klasę szablonu monitora przy użyciu kompilatora C++ 03 przy użyciu biblioteki Boost.
Czy wywołujesz 'synchronizedLogger.Debug()' przez przypadek? – juanchopanza
Nie widzę żadnego z twojego kodu używającego czegoś o nazwie 'Debugowanie', więc trudno jest powiedzieć, co to oznacza – PlasmaHH
W związku z tym, myślę, że Sutter stwierdza, że monitor jest rodzajem antystyku, a następnie przedstawia lepsze rozwiązanie. Przygotowałem działającą wersję tego rozwiązania [tutaj] (http://juanchopanzacpp.wordpress.com/2013/03/01/concurrent-object-wrapper-c11/), ale jest to ściśle C++ 11. – juanchopanza