`unique_lock`、`scoped_lock` 和 `lock_guard` 中指定的 mutex_type 的用例是什么?
What is the use case for mutex_type specified in `unique_lock`, `scoped_lock` and `lock_guard`?
用于保护 std::mutex
的 c++11 互斥 RAII 类型都有一个类型定义:
typedef Mutex mutex_type;
这个成员typedef有什么意义?起初我认为它可以用来概括创建一个对象来移动锁(在 unique_lock
的情况下)例如:
template<SomeLock>
void function(SomeLock in)
SomeLock::mutex_type newMutex;
//Do something
但我无法想象它的用途。
需要进一步注意的是,在 locks
的实现中似乎没有在任何地方使用它(至少在 VisualC++ 中没有)。
成员mutex_type
的用例是什么?
每个模板参数都有一个类型别名在标准库中是很正常的。副手,我不记得 std
中的一个模板 没有 别名它的所有模板参数作为成员类型
在一组相关的 类 中为类型别名使用不同的名称可以很容易地将该组与其他 类 区分开来,例如对于 SFINAE
template<typename Lock, typename = std::void_t<Lock::mutex_type>>
void usesLock(Lock lock); // Substitution failure for most instantiations of Lock
它还允许您轻松指定适当类型的参数。
template<typename Lock>
void usesMutex(Lock::mutex_type & mut);
用于保护 std::mutex
的 c++11 互斥 RAII 类型都有一个类型定义:
typedef Mutex mutex_type;
这个成员typedef有什么意义?起初我认为它可以用来概括创建一个对象来移动锁(在 unique_lock
的情况下)例如:
template<SomeLock>
void function(SomeLock in)
SomeLock::mutex_type newMutex;
//Do something
但我无法想象它的用途。
需要进一步注意的是,在 locks
的实现中似乎没有在任何地方使用它(至少在 VisualC++ 中没有)。
成员mutex_type
的用例是什么?
每个模板参数都有一个类型别名在标准库中是很正常的。副手,我不记得 std
中的一个模板 没有 别名它的所有模板参数作为成员类型
在一组相关的 类 中为类型别名使用不同的名称可以很容易地将该组与其他 类 区分开来,例如对于 SFINAE
template<typename Lock, typename = std::void_t<Lock::mutex_type>>
void usesLock(Lock lock); // Substitution failure for most instantiations of Lock
它还允许您轻松指定适当类型的参数。
template<typename Lock>
void usesMutex(Lock::mutex_type & mut);