有std::unique_lock几个接受xxx_lock_t. 这些是空结构:
struct adopt_lock_t {};
struct defer_lock_t {};
struct try_to_lock_t {};
Run Code Online (Sandbox Code Playgroud)
它们对应的值如下。
constexpr adopt_lock_t adopt_lock {};
constexpr defer_lock_t defer_lock {};
constexpr try_to_lock_t try_to_lock {};
Run Code Online (Sandbox Code Playgroud)
最后,这是std::unique_lock的构造函数。
unique_lock (mutex_type& m, adopt_lock_t tag);
unique_lock (mutex_type& m, defer_lock_t tag) noexcept;
unique_lock (mutex_type& m, try_to_lock_t tag);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么他们使用这种标签而不是枚举类型?
我认为通过使用枚举,我们不需要为每种类型的锁定声明构造函数。我也同意,通过实现每种类型的构造函数,不需要比较实现中给出的锁类型。
主要原因是什么?
如果您使用enum,则必须在运行时确定锁定时选择哪种模式,\xc3\xa0 la:
if(mode == lock::adopt_lock) {\n ...\n} else if(mode == lock::defer_lock) {\n ...\n}\nelse ...\nRun Code Online (Sandbox Code Playgroud)\n\n通过重载,您可以将这种区别转移到编译时。
\n| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |