用于保护std::mutex
的c ++ 11互斥锁RAII类型都具有typedef:
typedef Mutex mutex_type;
这个成员typedef有什么意义?起初我以为它可以用于概括创建一个移动锁的对象(例如unique_lock
):
template<SomeLock>
void function(SomeLock in)
SomeLock::mutex_type newMutex;
//Do something
但我无法想象这个用途。
另一个注意事项是它似乎不会在locks
的实现中使用(至少在VisualC ++中没有)。
会员mutex_type
的用例是什么?
答案 0 :(得分:1)
在标准库中,每个模板参数都具有类型别名是正常的。临时而言,我无法回忆起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);