Herb Sutter descrive l'implementazione del modello di classe Monitor in "C++ e oltre 2012: Herb Sutter - C++ Concurrency":Monitoraggio dell'implementazione della classe <T> in C++ 11 e 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); }
};
Sto cercando di avvolgere la mia classe esistente Logger:
Logger logger;
monitor<Logger> synchronizedLogger(logger) ;
ho due domande. Perché questo codice non viene compilato in Visual Studio 2012 con C++ 11? Il compilatore dice che "Debug": non è un membro di "monitor" ", dove Debug è un metodo della classe Logger.
Come implementare la stessa classe di modello di monitoraggio con il compilatore C++ 03 utilizzando la libreria Boost.
Stai chiamando 'synchronizedLogger.Debug()' per caso? – juanchopanza
Non riesco a vedere alcun codice usando qualcosa chiamato "Debug", quindi è difficile dire a cosa si riferisce – PlasmaHH
Come nota correlata, penso che Sutter affermi che il monitor è una sorta di anti-pattern, e quindi presenta un soluzione migliore Ho messo insieme una versione funzionante di questa soluzione [qui] (http://juanchopanzacpp.wordpress.com/2013/03/01/concurrent-object-wrapper-c11/), ma è rigorosamente C++ 11. – juanchopanza