Herb Sutter beschreibt die Umsetzung von Template-Monitor-Klasse in "C++ and Beyond 2012: Herb Sutter - C++ Concurrency":Monitor <T> Klassenimplementierung in C++ 11 und 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); }
};
Ich versuche, meine vorhandenen Klasse Logger zu wickeln:
Logger logger;
monitor<Logger> synchronizedLogger(logger) ;
Ich habe zwei Fragen. Warum kompiliert dieser Code nicht in Visual Studio 2012 mit C++ 11? Compiler sagt, dass "Debug": kein Mitglied von "Monitor" ist, wo Debug eine Methode der Logger-Klasse ist.
Wie die gleiche Monitor-Vorlagenklasse mit C++ 03-Compiler mit Boost-Bibliothek zu implementieren.
Rufen Sie 'synchronisedLogger.Debug()' auf irgendeine Weise? – juanchopanza
Ich kann nichts von Ihrem Code mit etwas mit dem Namen 'Debug 'sehen, so ist es schwer zu sagen, was es bezieht sich auf – PlasmaHH
Als eine damit verbundene Anmerkung, denke ich, Sutter gibt an, dass der Monitor eine Art von Anti-Muster ist, und präsentiert dann bessere Lösung. Ich habe eine funktionierende Version dieser Lösung [hier] zusammengeschustert (http://juanchopanzacpp.wordpress.com/2013/03/01/concurrent-object-wrapper-c11/), aber es ist streng genommen C++ 11. – juanchopanza