我试图了解 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);
}
};
Run Code Online (Sandbox Code Playgroud)
我设法创建了一个以更老式和更简单(至少对我而言)的方式做同样事情的类:
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;
};
Run Code Online (Sandbox Code Playgroud)
Herb Sutters 的代码在哪些方面比我的好?
Herb Sutters 的代码在哪些方面比我的更好?
T应该是默认可构造和可分配的。在 Herb Sutters 代码中,T应该是可复制构造的。
Herb Sutters 代码允许初始化成员。
您operator ()不处理参考。
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |