我试图了解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应该是默认可构造且可分配的。
  • 在Herb Sutters代码中,T应该是可复制构造的。
  • Herb Sutters代码允许初始化成员。
  • 您的operator ()不处理引用。
  • 关于c++ - Herb Sutters如何监督类(class)工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60522330/

    10-11 23:23