我试图了解Herb Sutter在C++和Beyond 2012上提出的监视器类:
template<typename T>
class monitor {
private:
mutable T t;
mutable std::mutex m;
public:
monitor(T t_ = T{}) : t{ t_ } {}
template<typename F>
auto operator()(F f) const -> decltype(f(t))
{
std::lock_guard<std::mutex> _{ m }; return f(t);
}
};
我设法创建了一个类,它以更老式,更简单(至少对我而言)的方式执行相同的操作:
template<typename T>
class MyMonitor {
public:
MyMonitor() { t = T(); }
template<typename F>
auto callFunc(F f) {
std::lock_guard<std::mutex> lock(m);
return f(t);
}
private:
T t;
std::mutex m;
};
Herb Sutters在哪些方面比我的代码更好?
最佳答案
T
应该是默认可构造且可分配的。 T
应该是可复制构造的。 operator ()
不处理引用。 关于c++ - Herb Sutters如何监督类(class)工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60522330/